IMD 1.17: 11/11/2014 11:59:10 82VKXSVRDOS B* VERSADOS/RMS68K SRC/OBJ 4.4 (NOT BOOTABLE) SN=49367 25 OF 30  SR25q82VKXSVRDOS 0420§l-)RATHERTHAN(!)FORTHEPROMPT***‰PAGE**ˆREVISIONCODE‡0902813*3*’RE-LINKEDSOALLSECTIONSWILLBEINSEGMENTZERO*‰PAGE**ˆREVISIONCODE‡1120813*2*’CORRECTPROBLEM‚LIBX,Y,Z„WHERE',Z'WASIGNORED*’CORRECTPROBLEM‚LIBX,#CNXX!*£LIBX,#†WHEREXXISTERMINALID/*’CORRECTPROBLEM‚LIBXˆWHEREXHASNO.ROFILE7*’CORRECTPROBLEMOFNOTEDITINGFORSBARGERRORIFONE *¢RETURNED:*’CORRECTPROBLEMOFTERMINATINGIMMEDIATELYIFPROCESSING*¢ACHAINFILE0*’CORRECTPROBLEM‚>LISTˆWHERETHELIBRARYHASNO *°MODULESV(p0e8Y@FHJPGX„`ahOpSx[€Sˆdd˜; J¨E°T¸MÀPÈGÐGØDàHèJðQøbWY 7*’CORRECTPROBLEMOFINVALIDCMDWHENCHANGINGREVISION*¢NUMBERORCODE**‰PAGE***ˆREVISIONCODE‡1130813**0*’CORRECTPROBLEM‚LIBX,Y†WHEREXDOESNOTEXIST *£>LIST‡THEMESSAGEDOESNOTGO*°TOTHELISTFILE**‰PAGE***ˆREVISIONCODE‡1222813**8*’DISPLAYADDITIONALINFORMATIONWITHTHE'LIST'COMMAND(*’CORRECTTHEFOLLOWINGCOMMANDSEQUENCE*œLIST(ALLMODULES)*œLIST(SECIFICMODULE)*œLIST(ALLMODULES)****‰PAGE***ˆINCLUDEFILES***ˆINCLUDE9995.&.FME.EQ*ˆINCLUDE9995.&.IOE.EQ*ˆINCLUDE9995.&.TR1.EQ**‰NOLIST‰INCLUDE9995.&.FME.EQ‰INCLUDE9995.&.IOE.EQ‰INCLUDE9995.&.TR1.EQ‰LIST**‰PAGE<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;**************************************************************ˆ***†LIB‚COMMANDƒ*******ˆ***‰DATAƒSEGMENT„*******=****************************************************************ˆ****‚EQUATEAREA‚******* BEGDATA‚EQU0#STKLENƒEQU25‹STACKLENGTHINWORDS)BUFSIZE‚EQU160‰INPUTCOMMANDBUFFERSIZE DSKLUIƒEQU1(DSKLUOƒEQU2‹DISKLOGUNITASSIGNOUTPUT!LISTLUƒEQU3‹LISTINGLOGICALUNIT,DSKLUI2‚EQU4‹DISKLOGUNITFORSOURCEINPUTSECLENƒEQU256‰SECTORLENGTH CR‡EQU$0D LF‡EQU$0A SPACE„EQU$20 SLASH„EQU$2F COMMA„EQU$2C*‰PAGE* ‰OFFSET$0000 STARBUF‚EQU*&***************************************ˆLIBRARYCOMMANDLINEBUFFER&*************************************** WORKBUF‚EQU*‰DS.B80WORKBUFE EQU *-1‰DS.L1*.***********************************************ˆLIBRARYBUFFER.**********************************************LIBBUFƒDS.BSECLENLIBBUFE‚EQU*-1‰DS.L1*SOURBUF‚DS.BSECLENSOURBUFE EQU *-1‰DS.L1*3******************************************************ˆBUFFERAREATOREADCONTIGUOUGFILEINTO*ŠWILLHOLD292MODULEENTRIES*3**************************************************** DIRLIBƒEQU* ‰DS.LSECLEN ‰DS.LSECLEN ‰DS.LSECLEN ‰DS.LSECLENDIRLIBEƒEQU*-1‰DS.L3* BUFENDƒEQU*BUFSIZƒEQU‚BUFEND-STARBUF‰PAGE ‰SECTION0(‰XREFPARSE,OPTION,EDITFILE,SBARG,DATEOJ**ˆNEXTWORDBOUNDRYMACRO***2*******************************************************„DATASEGMENT(DSEG)ƒ****1*************************************************** PBA†EQU** REV_CODE:‰DC.B†'1220844'&*œWHEREREV_CODEISDEFINEDASFOLLOWS *œMMDDYYXZ*3*œMMDDYY=MONTHDAYYEAROFLASTASSEMBLYORPATCH*œX†=REVISIONTYPECODE*¦SPACE=CLEANASSEMBLY *¦P…=PATCHED*¦C…=CUSTOMIZEDPATCHED**#*œZ†=VERSADOSMAJORREVISIONFIELD*‰PAGE:************************************************************ ‰DS.LSTKLEN PROGSTK‚EQU**‰DC.L08*+++++++++++++++++++++++++++++++++++++++++++++++++++++++*,*ˆ***ƒBUFFINISTHEAREATHECOMMANDLINEIS.*ˆ***ƒREADINTOWHENTHISPROGRAMISCALLEDIN*8*+++++++++++++++++++++++++++++++++++++++++++++++++++++++**BUFFINƒCOMLINEBUFSIZE‚***‚INPUTBUFFER‚***-**********************************************‰DS.W0*,********************************************(*ˆPARAMETERTABLEFORGETSEGFORBUFFER,******************************************** BUFPARƒEQU*%‰DC.L0,0ƒTASK(0=SELF),SESSION(N/A) SEG_OPTS:‰DC.W0…OPTIONS‰DC.W0(RAMSEGMENT)‰DC.L'BUFR'ŠNAMEOFSEGMENT‰DC.L0STARTOFSEGMENT‰DC.LBUFSIZŠLENGTHOFBUFFER*AS_ADDR:‰DC.L†0*œADDROFALLOCATEDSEGMENT5******************************************************+*ˆ**‚IOSPARAMETERTABLEFORDISKREADS‚***6*ˆ**‚REFERTOIOSEQUATESUNDERIOSPARAMETERBLOCK‚***5******************************************************‰DS.W0 LIBRIOS‚EQU* ‰DC.WIOREAD‰DC.WIOPWAT+IOPREC‰DC.B0 ‰DC.BDSKLUI‰DC.B0‰DC.B0‰DC.L0LIBRSAD‚DC.L0LIBREAD‚DC.L0‰DC.L0‰DC.L0&**************************************%*ˆIOSPARAMENTERTABLEFORDISKWRITE*$************************************* TEMPIOS‚EQU* ‰DC.WIOWRIT  ‰DC.WIOPREC‰DC.B0 ‰DC.BDSKLUO‰DC.B0‰DC.B0‰DC.L0TEMPSAD‚DC.L0TEMPEAD‚DC.L0‰DC.L0‰DC.L0*%*ˆIOSPARAMETERBLOCKFORSOURCEFILE* SOURIOS‚EQU* ‰DC.WIOREAD‰DC.WIOPWAT+IOPREC‰DC.B0 ‰DC.BDSKLUI2‰DC.B0‰DC.B0‰DC.L0SOURSAD‚DC.L0SOUREAD‚DC.L0‰DC.L0‰DC.L0*3*****************************************************ŒIOSPARAMETERTABLE(*ˆSETUPIOS(ERR0R-LOG)‚PARAMETERBLOCK*3****************************************************6‰IOS.OUT6IOWRIT,IOPASC+IOPFOR+IOPWAT,LDFLUN,0,0,0,0,0‰DS.W07‰IOS.OUT6IIOWRIT,IOPASC+IOPIMG+IOPWAT,LDFLUN,0,0,0,0,0‰DS.W0**ˆSETUPIOSFORLISTINGLU3*6‰IOS.OUT3IOWRIT,IOPASC+IOPFOR+IOPWAT,LISTLU,0,0,0,0,0‰DS.W0"***********************************8*ˆFHSPARAMETERTABLEFORCHANGELOGICALUNITASSIGNMENT6*ˆCHANGEISFROM6TO3--SENDSOURCEISLUAINMASK*ˆANDRECEIVEISLUBINMASK4*ˆLU3ISUSEDF0RLISTINGANDLU6FORERR0R/LOGGING**3*ˆPARAMETERTABLEFORCHANGLOGICALUNITASSIGNMENT,*ˆISDIFFERENTFROMSTANDARTPARAMETERTABLE*%************************************** LU3AFHSƒEQU*'‰DC.WFHCHLU„COMMAND(CHANGELUASSIGN)‰DC.WFOPKEP…OPTIONKEEPASSIGN‰DC.B0ŠSTATUS‰DC.BLDFLUNŠSENDLUNUMBER‰DC.BLISTLUŠRECEIVELUNUM‰DC.B0ŠRESERVED%‰DC.L0ŠTASK-ID(0MEANSUSEYOURSELF(‰DC.L0ŠSESSION#(0MEANSUSEYOURSELF)**,*********************************************&*ˆPARAMETERBLOCKFOR‚INPUT(TERMINAL)*,*********************************************( IOS.OUTIN IOREAD,IOPFOR,CDFLUN,,,0,0,80**)******************************************?*ˆLU3FHSISPARMTABLEFORLU3WHICHISUSEDFOROUTPUTLISTING*********************************************‰FHS.LU30,0,LISTLU,0,0,0,0,0 ‰DC.L0,0,0*;************************************************************:*ˆ***DSKFHSISTHEPARAMETERTABLEFORTHEFHSINPUTFILE*;***********************************************************LIBFHS„DC.WFHASGNŒCOMMAND!‰DC.WFOPPREWŠOPTIONSPUBLICREAD‰DC.B0ŠSTATUS ‰DC.BDSKLUI†LOGICALUNITNUMBER!LIBVOL„DC.L$20202020‚VOLUMENAME‰DC.W0ŠUSERNUMBER"LIBCATƒDC.L$20202020ˆCATALOGNAME‰DC.L$20202020 LIBNAME‚DC.L$20202020‚FILENAME‰DC.L$20202020LIBEXTƒDC.W$2020†EXTENSION‰DC.W0ŠRESERVED‰DC.B0ŠWRITEPROTECTCODE‰DC.B0ŠREADPROTECTCODE‰DC.W$100ŠLOGICALRCORDLENGTH0‰DC.L0ŠCONTIGUOUSFILESIZE/DIRENTRYPOINTER6*ˆFOLLOWINGFHSPARAMENTERSFORSHAREDSEGMENTREQUEST(‰DC.L0ŠSEGMENTSTARTINGLOGICALADDRESS$‰DC.L0ŠSEGMENTENDINGLOGICALADDR.3‰DC.L0ŠLENGTHOFPARMBLOCKFORSHAREDSEGREQUESTLIBFHSE‚EQU*-1‰DC.L0*;************************************************************:*ˆ***TMPFHSISTHEPARAMETERTABLEFORTHEFHSINPUTFILE*;***********************************************************!TMPFHS„DC.WFHALLO+FHASGNŒCOMMAND3‰DC.WFOPEREW+FOPSEQŠOPTIONSPUBLICREAD&SEQFILE‰DC.B0ŠSTATUS ‰DC.BDSKLUO†LOGICALUNITNUMBER!TMPVOL„DC.L$20202020‚VOLUMENAME‰DC.W0ŠUSERNUMBER"TMPCATƒDC.L$20202020ˆCATALOGNAME‰DC.L$20202020 TMPNAME‚DC.L$20202020‚FILENAME‰DC.L$20202020TMPEXTƒDC.W$2020†EXTENSIONƒDC.W0ŠRESERVED‰DC.B0ŠWRITEPROTECTCODE‰DC.B0ŠREADPROTECTCODE‰DC.W0ŠLOGICALRCORDLENGTH1‰DC.L0ŠCONTIGUOUSFILESIZE/DIRENTRYPOIN2TER6*ˆFOLLOWINGFHSPARAMENTERSFORSHAREDSEGMENTREQUEST(‰DC.L0ŠSEGMENTSTARTINGLOGICALADDRESS$‰DC.L0ŠSEGMENTENDINGLOGICALADDR.3‰DC.L0ŠLENGTHOFPARMBLOCKFORSHAREDSEGREQUEST‰DC.L0*/***********************************************5*ˆPARMBLOCKFORCHANGELOGICALUNITFROMTEMPTOLIB/************************************************CHGLUFHS EQU *‰DC.WFHCHLU…CHANGLOGUNITNUM‰DC.W0‰OPTIONS‰DC.B0ŠSTATUS‰DC.BDSKLUOŠCHGLUA‰DC.BDSKLUIŠCHGLUB ‰DC.B0ŠRES‰DC.L0‰DC.L0‰DC.L0*$*ˆFHSPARAMETERBLOCKFORLIBSORUCE SOURFHSƒEQU*‰DC.WFHASGNŠCOMMAND‰DC.WFOPPRPWŠOPTIONS-‰DC.B0ŠSTATUS ‰DC.BDSKLUI2…LOGICALUNITNUM‰DC.L$20202020‚VOLUMENAME‰DC.W0ŠUSERNUM‰DC.L$20202020ˆCATNAME‰DC.L$20202020‰DC.L$20202020ˆFILENAME‰DC.L$20202020 ‰DC.W$2020‰DC.W0‰DC.B0ŠWRITEPROTCODE‰DC.B0‰DC.W0‰DC.L0ŠCONTFILESIZE ‰DC.L0,0,0*8*ˆTABLEOFVALIDCHARACTERFORTHEMODULEVERIFYROUTINE* MODTABƒEQU**LINE1HEX00-0F'‰DC.B0,0,0,0,0,0,0,0,0,0,0,0,0,'T',0,0*ŒLINE2‚HEX10-1F%‰DC.B0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*ŒLINE3‚HEX20-2F"*‘SP!"#$%&'()*+‚,‚-.‚/+‰DC.B'T',0,0,0,2,0,0,0,0,0,0,0,'T',0,1,'T'*‰LINE„4HEX‚30-3F!*0123456789:;<=>?%‰DC.B2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0*‰LINE„5HEX40-4F!*@ABCDEFGHIJKLMNO%‰DC.B0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1*‰LINE„6‚HEX50-5F*PQRSTUVWXYZ[\]%‰DC.B1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,2%‰DC.B0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0%‰DC.B0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0‰DS.W08**********************************************************ˆ***ƒWORK‚AREAƒ******9**********************************************************STSKNAM‚DC.L0‰SAVETASKNAMESESNUMƒDC.L0ˆSAVESESSIONNUM#VOLNAMƒDC.L0‰SAVEVOLDEFAULTNAME‰DC.W0‰TOPHALFOFD3"USERNUM‚DC.W0ŠDEFAULTUSERNUMBER*CATNAMƒDC.L0,0‡SAVEDEFAULTCATAGORYNAME‰DS.L†1‰REGD6REGD7„DS.L†1‰REGD7‰DS.L†1‰REGA0&TIDLOGON‚DC.L0‰TERMIDATLOGONTIME‰DC.W0TOPHALFOFA2‰DC.W0ŠLOGONUSERNUMBER‰DS.L8‰SAVEOTHERSREGISTERS*‰DS.W0&DIRF…DC.L0…DIRECTORYSWITCH&POINTER.PREVDIRFDC.L0…PREVDIRFINE(USEDINCHANGE) DNRR…DC.B'‚'‡NOTREADYRESPONSEAFLAG„DC.B0ŠADDFLAGDFLAG„DC.B0ŠDELETEFLAGCFLAG„DC.B0ŠCOPYFLAGCHFLAGƒDC.B0…CHANGEFLAGLFLAG„DC.B0ŠLISTFLAGQFLAG„DC.B0…QUITFLAG"RFLAG„DC.B0‰RETURNTOGETDIRFLAGEXFLAGƒDC.B0ŠENDOFINPUTFLAG1FILENDƒDC.B0…REACHEDENDOFFILEON‚LIBRARYFLAG"PASSS2„DC.B0…SETWHENIN2NDPASS‰DS.W00SAVOADD„DC.L0Š1STTIMEFLAGFORPRTDETAILLINE"HOLDLOCMDC.L0ŒLOCATIONOFMODULEFLAGH„DC.B0ŠPRINTHEADERFLAG+ADDMORE‚DC.B0ŠMOREMODULESFORADDCOMMAND-MORECHA‚DC.B0‰MOREITEMSFORCHANGECMDFLAG#THRUMOD‚DC.B0ŠMODREADTHRUSWITCH%ATMOD„DC.B0‚FLAGFORBLD1HAFROUTINE,RLMSG„DC.B0‚PRINTERRORMSGINREADLIBFLAG7NAMSAME‚DC.B0ŠFLAGFORREPLACECKSAMENAMESOLD&NEW2BLD1END‚DC.B0ŠREACHEDENDOFFILEINBLD1HAFROUT+FLAGCND‚DC.B0ŠNOLIBCHANGEROUTINEOPTION.RD1ST„DC.B0ŠUSEDINBLD2HAFROUTINEASAFLAGNPFLAGƒDC.B0…NOPRINTFLAGLASTLAST DS.B 5‰DS.W0!DIRFULL‚DC.B0‚SETIFDIRISFULL*NEWLIBƒDC.B0…NEWLIBRARYWASCREATEDFLAGDIREXISTDC.B0ŠDIREXISTSFLAGLIBGOOD‚DC.B1%DIROPTƒDC.B0ŠDONOTBUILDDIROPTION!LIBPREV‚DC.B0ŠINPUTWASASSIGNED#DIRCHGƒDC.B0ŠCHANGEDIRECTORYFLAG*8TEMPIOSFDC.B0Šflagtochecktempfilecreatedƒ10/24/83.***********************************************"*ˆSTARTOFPRINTHEADERS&BUFFERS.***********************************************‰DS.W0QUESTM:‚DC.B$0D,$0A‰DC.B†'LIBRARYVERSION' VERS_NBR: ‰DC.B†'ˆ' ‰DC.B†CR,LF‰DC.B'LIBRARYCOMMANDS' ‰DC.B$0D,$0A?‰DC.B'ƒ(F=FILENAME„M=MODULENAME„DEFAULTEXTENSION=RO)'‰DC.B$0D,$0A,$0A;‰DC.B'‚Add…=(AF)OR(AF/)OR(AF/M)OR(AF,F/....,F)' ‰DC.B$0D,$0A-‰DC.B'‚CHange‚=(CHM)OR(CHM,M,M,....,M)' ‰DC.B$0D,$0A1‰DC.B'‚COpy„=(COF/M)OR(COF/M,F/M,....,F/M)' ‰DC.B$0D,$0A/‰DC.B'‚DELete‚=(DELM)OR(DELM,M,M,....,M)' ‰DC.B$0D,$0A/‰DC.B'‚List„=(L)‚OR‚(LM)OR(LM,M,M....,M)' ‰DC.B$0D,$0A‰DC.B'‚Quit„=(Q)OR(QUIT)' ‰DC.B$0D,$0A2‰DC.B'‚Replace=(RF/M)OR(RF/M,F/M,....,F/M)'‰DC.B$0D,$0A,LFQUESTME‚EQU*-1‰DS.W0DIRLOCƒDC.L0DIRPOINTERRLIBLOCƒDC.B'Œ'‚LOCINLIBRARY‰DS.W0SECTCNT‚DC.W0ŠCOUNTOFSECTORS0DIRENDƒDC.L0ŠPOINTERATNEXTAVAILSPACEINDIR+TOTMODƒDC.W0ŠTOTALCOUNTOFMODULESINLIB‰DS.W0*(LISTTITLDC.B'MODULE†VER‚REV‚LNGƒDESC…'LT_DATE: ‰DC.B†'Š'LT_TIME: ‰DC.B†'Š'LISTTITE EQU *-1‰DS.W†0**ˆDATAAREAFORLISTFUNCTION* LISTDATA EQU *LISTMOD‚DC.B'Š'‚MODULENAME ‰DC.B'‚'LISTVER‚DC.B'ƒ'†VERSION ‰DC.B'‚'LISTREV‚DC.B'ƒ'†REVISION ‰DC.B'ƒ'LISTLANG DC.B ' ' ‰DC.B'„'LISTDESCDC.B'Š' ‰DC.B'Š' ‰DC.B'Š' ‰DC.B'Š' ‰DC.B'Š'LISTDESE EQU *-1‰DS.W0*"PROMPTM‚DC.B'>'‡PROMPTCHARACTER*‰DS.W0*PRTTOTM‚DC.B'TOTALMODULES'PRTTOTN‚DC.B'„'PRTTOTME EQU *-1‰DS.W0*INVMSGƒDC.B'‚INVALID'INV_XX: ‰DC.B†'CMD„' ‰DC.B†CR,LFINVMSGE‚EQU*-1‰DS.W0*X00100: ‰DC.B†'Š'*œSPACEFORFILENAME‰DC.B†'ISANINVALIDFILETYPE' ‰DC.B†CR,LFX00199:‚EQU‡*-1‰DS.W†0* ENTM…EQU*‰DC.B'ENTERSOURCEFILENAME‚' ENTME„EQU*-1‰DS.W0****‰DS.W0 NOLIBMƒEQU*‰DC.B'LIBRARYDOESNOTEXIST'NOLIBME‚EQU*-1‰DS.W0* MODMSGƒDC.B'Œ'‚HOLDMODULENAME*‰DC.B'MODULENOTFOUND'NOMODME‚EQU*-1*‰DS.W0 MODALMƒEQU*‰DC.B'MODULE‚'MODALMI‚DC.B'Œ'‰DC.B'ALREADYINTHELIBRARY'MODALME‚EQU*-1‰DS.W0* MODMISM‚EQU*‰DC.B'NOMODULENAME'MODMISME‚EQU*-1‰DS.W0* INSM…EQU**‰DC.B'INSERTAFTERMODULENAMENOTFOUND' INSME„EQU*-1‰DS.W0* LIBFULM‚EQU**‰DC.B'**‚WARNINGDIRECTORYWASFILLED**'LIBFULME EQU *-1‰DS.W0* INSENDM‚EQU*!‰DC.B'INSERTWASATLIBRARYEND'INSENDME EQU *-1‰DS.W0* MODMƒEQU*‰DC.B'INVALIDMODULENAME' MODME‚EQU*-1‰DS.W0* REPMSGƒEQU*‰DC.B'‚REPLACED‚'REPM1„DC.B'Š'OLDMOD ‰DC.B'BY'REPM2„DC.B'Š'‚NEWMODREPMSGE‚EQU*-1‰DS.W0* CHGSUCM‚EQU*‰DC.B'CHANGED‚'CHGSUC1‚DC.B'Š'CHGSUCE‚EQU*-1‰DS.W0*"COPSUCM‚DC.B'SUCCESSFULCOPYOF‚'COPSUC1‚DC.B'Š'COPSUCME EQU *-1‰DS.W0* DELMSGƒEQU*‰DC.B'DELETED‚'DELNAMƒDC.B'Š'DELMSGE‚EQU*-1‰DS.W0 ADDMSGƒEQU*‰DC.B'ADDED‚'ADDNAMƒDC.L'Š'ADDMSGE‚EQU*-1‰DS.W0*)SAVNAMƒDC.B'Š'‚SAVEMODNAMEFORREPLACE*MODNAMƒDC.B'Œ'‚MODULENAME‰DS.L1* TEMPM„EQU*&‰DC.B'ERROR-CHECKFOR*TEMPLIB.RO*'TEMPMEƒEQU*-1*‰DS.W0*2MSM†DC.B'WARNINGSOURCEHASMORETHENONEMODULE' MSME…EQU*-1‰DS.W0*&ENTCHGM‚DC.B'ŒENTERNEWMODULENAME'ENTCHGME EQU *-1*/ENTCM1ƒDC.B'OLD-†ENTERNEWVERSION#(0-255)'ENTCM1E‚EQU*-1‰DS.W0*0ENTCM2ƒDC.B'OLD-†ENTERNEWREVISION#(0-255)‚'ENTCM2E‚EQU*-1‰DS.W0*&ENTCM3ƒDC.B'ENTERDESCRIPTIONUPTO'ENTCM3C‚DC.B'‚'‰DC.B'CHARACTERS'ENTCM3E‚EQU*-1‰DS.W†0NOIDM:‰DC.B†'NOMODULEIDRECORDS'NOIDMEƒEQU‡*-1‰DS.W†0*** LIB_FLG1:‰DC.W†0*œGENERALLIBRARYFLAG1 *œBIT‡MEANING**ž0‡0-->NOIDMSGHASNOTBEENDISPLAYED$*¦1-->NOIDMSGHAS…BEENDISPLAYED*#*ž1‡0-->NOOUTPUTFIELDSPECIFIED*¦1-->„OUTPUTFIELDSPECIFIED‰PAGE‰DS.W†0‰FORCEWORDBOUNDRY***’ERRORMESSAGEPARAMETERBLOCK**EM_PBLK: EM_DO:ƒDC.L†0"*œD0-IOS/FHSRETURNERRORSTATUS*œ(ERRORMSGKEYVALUE) EM_A0:ƒDC.L†0"*œA0-ADDROFI/OPARAMETERBLOCKEM_OPT:‚DC.B†0*œOPTIONSFLAG*œBIT‡MEANINGIFSET*0ˆQUERYRESPONSEDESIREDEM_TLUN:DC.B†0*œUSERTERMINALLUN-(LDFLUN)EM_QRC:‚DC.B†0*œQUERYRETURNCHARACTEREM_KLUN:DC.B†0*œUSERKEYBOARDLUN-(CDFLUN)EM_SPA:‚DC.L†0'*œSTARTADDRESSFORUSERTEXTPLUGPOOLEM_EPA:‚DC.L†0%*œENDƒADDRESSFORUSERTEXTPLUGPOOL‰PAGE ENDDATA‚EQU*‰PAGE** BEGPROC‚EQU**<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<***************************************************************”LIBRARYCOMMAND-*ˆ***‚PROCEDURESECTIONFORCOPYCOMMAND‚******<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;*************************************************************$‰LEAPBA(PC),A7‚SETUPSTACKPOINTER*&***************************************.*ˆ**ƒSAVEDEFAULTVALUEPASSEDFROMSYSTEM****'*****************************************;‰MOVEM.LD0-D7/A0-A7,STSKNAM-PBA(A7)ƒSAVEREGISTERCONTENTS*+*ˆD0TOSTSKNAM=TASKNAMETHATSTARTEDME*ˆD1TOSESNUM‚=SESSIONNUM $*ˆD2TOVOLNAM‚=DEFAULTVOLUMENAME*ˆD3TOUSERNUM=USERNUMBER*ˆD4TOCATNAM‚=CATALOGUENAME*ˆD5TOCATNAM+4**ˆD6=‚LENGTHOFCOMMANDLINE)*ˆD7=BITMASKOFLOGICALUNITSASSIGNED*ˆA0=YOURTASKNAME*ˆA1=TERMINALID*ˆA2=ACTUALUSERNUMBER(*ˆA3=SYSTEMVOLUMEDEFAULE(ALLSPACES)*ˆA4=SYSTEMUSERNUMBER*ˆA5=SYSTEMCATALOGUE*ˆA6=SYSTEMCATPART2**‰PAGE***ˆINITIALIZESTACKPOINTER&*ˆSETUPPROGRAMBASEADDRESSREGISTER** ‰MOVE.L„A7,A6*œA6=PROGRAMBASEADDRESS‰LEA‡PROGSTK(PC),A7*œA7=STACKADDRESS‰PAGE‰BSET†#13,SEG_OPTS-PBA(A6)/*œSETOTPIONFOROPERATINGSYSTEMTOALLOCATEA0*œSEGMENTWHOSELOGICALADDREQUALSTHEPHYSICAL *œADDRESS‰ERQ.GTSEGBUFPAR(PC)+*œALLOCATEASEGMENTWHOSEPHYSICALADDRESS*œEQUALSTHELOGICALADDRESS&*œEXPANDEDMACROREQUESTISASFOLLOWS*œLEA‡BUFPAR,A0*œMOVE.W„#GTSEG,D0 *œTRAP†#1* ‰BNE‡IOERPRT!*œJMPIFERRORALLOCATINGSEGMENT‰MOVE.L„A0,AS_ADDR-PBA(A6) ‰MOVE.L„A0,A5!*œA0=A5=ADDROFALLOCATEDSEGMENT‰LEA‡REV_CODE(PC),A3‰MOVE.L„(A3)+,VERS_NBR-PBA(A6) ‰MOVE.L„(A3)+,VERS_NBR+4-PBA(A6)$*œSETLIBRARYVERSIONNBRINMESSAGE‰PAGE**B*ˆDYNAMICALLYSETADDRESSESINIOS/FHSPARAMETERBLOCKSINSTEADOFA*ˆPUTTINGTHEMINATASSEMBLETIME.THISWILLACCOMODATEPOSITION*ˆINDEPENDENTCODE(PIC)**‰LEA‡WORKBUF(A5),A3"‰MOVE.L„A3,OUTINIOS-PBA+IOSSAD(A6)‰LEA‡WORKBUFE(A5),A3"‰MOVE.L„A3,OUTINIOS-PBA+IOSEAD(A6)2*œSTART/ENDADDRESSESFORPARAMETERBLOCKOUTINIOS‰LEA‡LIBBUF(A5),A3‰MOVE.L„A3,LIBRSAD-PBA(A6)‰LEA‡LIBBUFE(A5),A3‰MOVE.L„A3,LIBREAD-PBA(A6)0*œSETSTART/ENDADDRFORPARAMETERBLOCKLIBRIOS‰LEA‡SOURBUF(A5),A3‰MOVE.L„A3,SOURSAD-PBA(A6)‰LEA‡SOURBUFE(A5),A3‰MOVE.L„A3,SOUREAD-PBA(A6)/*œSTART/ENDADDRESSFORPARAMETERBLOCKSOURIOS‰LEA‡DIRLIB(A5),A3‰MOVE.L„A3,DIRLOC-PBA(A6)‰MOVE.L„A3,DIREND-PBA(A6),*œINITIALIZEDIRLIBINAPPROPRIATELOCATIONS‰PAGE/***************************************************„DRIVER‚BLOCK„****.************************************************#************************************ŠCALLCOMMANDPARSEROUTINE#************************************5*ˆASSIGNMENTOFSEND&RECEIVELU'SISDONEBYSYSTEM*‰LEA‡BUFFIN(PC),A0*œA0=ADDRSTARTPARSE ‰BSRPARSE‰TST.LD0‡CKF0RANYERR0RS‰BMIINVALERR‡BRIFERR0R*:‰MOVE.LA1,SAVOADD-PBA(A6)„SAVEADDRSTARTOFOUTPUTFIELD ‰BSRCKFOROPT**$‰BSRINITIN…GOTOINPUTINITROUTINE *º10/24/83 *º10/24/838*ˆresetflagtoalloctempfileifitisneeded…10/24/83 *º10/24/83$‰MOVE.B„#1,TEMPIOSF-PBA(A6)•10/24/83 *º10/24/83#‰TST.LSAVOADD-PBA(A6)„OUTPUTEXITS‰BNE.SGETOUT‹YES"‰BSRSETLU3‹ASSIGNLU3TOTERMINAL ‰BRA.SDOLIB***'GETOUTƒBSRNEWOUT…DONEWOUTPUTROUTINE***+*********************************************ˆLIBRARYDRIVERROUTINE*+******************************************** DOLIBƒEQU**'‰BSRCLFLAG‚CLEARFROMDIRFTOLASTLAST‰MOVE.W#IOREAD,SOURIOS-PBA(A6)$‰BSRREWINDL‰REWINDTHELIBRARYFILE+*œBYFORCINGCURRENTRECDPOINTERTOBESET*œATBEGINNINGOFFILE#‰LEAPROMPTM(PC),A3ƒINITPROMPTMSG‰LEAPROMPTM+1-PBA(A6),A4"***********************************ˆPRINTPROMPT(>)CHARACTER ********************************‰BSRPRTIFORM„SENDPROMPT!‰BSRCLEARW†GOBLANKRECEIVEAREA.‰IOSCALLOUTINIOS(PC)‚RECEIVELIBCOMMANDLINE ‰BNEIOERPRT ‰BSR‡SBARG/*œCONVERTLOWERCASETOUPPERCASEIFNECESSARY ‰BNE‡IOERPRT*œBRANCHIFSBARGERROR$‰BSR†SETENDŠPUT'CR'ATENDOFINPUT'‰BSRƒPARSEIN…GOPARSETHELINEOFINPUT/***********************************************;*ˆBIT0ISSETIND0IFNOOTHERDATAEXISTINCOMMANDLINE/*********************************************** ‰TST.LD0 ‰BMIDOLIB*œJMPIFERRORCONDITIONA‰MOVE.LA0,HOLDLOCM-PBA(A6)ƒLOCATIONOFMODULEADDRORTERMINATOR ‰BTST†#1,D0 ‰BEQ.S…CKADD!*œJMPIF'HELP'CMDNOTREQUESTED ‰BSR‡QUESTION*œOUTPUTHELPPANEL ‰BRA.S…DOLIB*œGOGETNEXTCMDREQUEST**CKADD:‰MOVE.L„D0,-(A7)  *œSAVEREG ‰BSR‡BUILDDIR&*œBUILDDIRECTORYEVERYTIMESOWECAN'*œGETAROUNDANULLFILEPROBLEM-THIS)*œISNOTTHEBESTSOLUTIONBUTITWASTHE+*œQUICKEST-LEASTEXPENSIVE-ANDITWORKS‰MOVE.L„(A7)+,D0 *œRESTOREREG‰TST.BAFLAG-PBA(A6) ‰BEQ.SCKDEL ‰BSRDOADD ‰BRADOLIB*0CKDEL„TST.BDFLAG-PBA(A6)ˆ***DELETECOMMAND*** ‰BEQ.SCKCOPY ‰BSRDODEL ‰BRADOLIB*/CKCOPYƒTST.BCFLAG-PBA(A6)ˆ***COPYCOMMAND*** ‰BEQ.SCKCHG ‰BSRDOCOPY ‰BRADOLIB*7CKCHG„TST.BCHFLAG-PBA(A6)‡******‚CHANGECOMMANDƒ****** ‰BEQ.SCKLIST ‰BSRDOCHG ‰BRADOLIB*/CKLISTƒTST.BLFLAG-PBA(A6)‹***LISTCOMMAND*** ‰BEQ.SCKREP ‰BSRDOLIST ‰BRADOLIB*1CKREP„TST.BRFLAG-PBA(A6)‹***REPLACECOMMAND*** ‰BEQ.SCKQUIT ‰BSRDOREP ‰BRADOLIB*CKQUIT:‰CLR.W…TERM_FLG-PBA(A6),*œSETTERMINATIONFLAGTONORMALTERMINATION‰TST.BQFLAG-PBA(A6) ‰BNE‡TERMINAT ‰BSRINVALER ‰BRADOLIB***’PUT'CR'ATENDOFINPUT0SETENDƒMOVE.LOUTINIOS-PBA+IOSSAD(A6),A0ˆSTADDR,‰ADD.L‚OUTINIOS-PBA+IOSLEN(A6),A0†ADDLENGTH‰MOVE.B#CR,(A0)SETCR‰RTS‰PAGE.***********************************************)*ˆROUTINETOBLANKLIBRARYCOMMANDBUFFER*,*********************************************CLEARWƒLEAWORKBUF(A5),A4‰LEAWORKBUFE(A5),A5(LIBCL„MOVE.L#'„',(A4)+‚BLANKOUTBUFFER‰CMP.LA4,A5…ATEND ‰BHILIBCL‡NO‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDR ‰RTS.RETURN*CLFLAGƒLEADIRF(PC),A3‰LEALASTLAST(PC),A4CLAGAIN‚MOVE.L#0,(A3)+‰CMP.LA3,A4…ATEND‰BHICLAGAIN…NO‰LEA‡LIBBUF(A5),A32‰MOVE.LA3,LIBRSAD-PBA(A6)‚INITLIBRARYPARMBLOCK‰LEA‡LIBBUFE(A5),A3‰MOVE.LA3,LIBREAD-PBA(A6)‰LEA‡SOURBUF(A5),A31‰MOVE.LA3,SOURSAD-PBA(A6)‚INITSOURCEPARMBLOCK‰LEA‡SOURBUFE(A5),A3‰MOVE.LA3,SOUREAD-PBA(A6)‰RTS*-***********************************************ˆROUTINETOCLOSELIBRARYFILE*-*********************************************%CLOSLIB‚MOVE.W#FHCLOS,LIBFHS-PBA(A6)‰FHSCALLLIBFHS(PC) ‰BNE‡IOERPRT ‰RTSŒ.RETURN*-***********************************************ˆCLOSESOURCEFILE*5*****************************************************'CLOSSOUR MOVE.W #FHCLOS,SOURFHS-PBA(A6)‰FHSCALLSOURFHS(PC)/‰MOVE.W#FHASGN,SOURFHS-PBA(A6)RESETTOASSIGN‰RTS*'***************************************!*ˆROUTINETOMOVEMODNAMTOFIELD**ˆMODNAMEISINA3&RECEIVINGFIELDINA4)*ˆA4MUSTBESETUPBEFORECALLINGMOVMOD'***************************************MOVMODƒLEAMODNAM(PC),A3‰MOVE.L(A3)+,(A4)+‰MOVE.L(A3)+,(A4)+‰MOVE.W(A3),(A4)MOVMODEXRTS.RETURN‰PAGE4******************************************************ˆTHISROUTINEWILL *’PARSETHELIBRARYCOMMANDLINE*"*ˆTHEFOLLOWINGCOMMANDSAREVALID*’ADD‘AORADMINIMUM*’CHANGEŽCH’MINIMUM*’COPYCO’MINIMUM*’DELETEŽDEL‘MINIMUM*’HELPHELPMINIMUM*’LISTLORLIMINIMUM*’QUITQORQUMINIMUM*’REPLACERORREMINIMUM* *ˆSTATUS„D0**œBIT‡MEANINGIFSET**31‡ERRORCONDITIONEXIST*ž1‡HELPCMDREQUESTED*ž0‡CRFOLLOWEDCOMMAND*%*ˆA0=ADDRESSNEXTMODULETOPROCESS*‹OR*ADDRESSOFTERMINATOR**4***************************************************** PARSEIN‚EQU* ˜CLR.LD0 ‰LEAWORKBUF(A5),A0STARTOFBUF ‰LEAWORKBUFE(A5),A1‚ENDOFBUFF‰CMP.B#CR,(A0)'‰BEQPRETERŠJMPIFNOCOMMAND‚-->ERROR;PBLK…CMP.B#$20,(A0)…FOLLOWINGLOGICEDITSFORABLANKLINE ‰BNE.SPON*œJMPIFNOTABLANKLINE ‰ADD.L#1,A0 ‰CMP.LA0,A1‰BHIPBLKŒJMPIFMORETOEDIT‰BRA.SPERRŠJMPIFBLANKLINE*PON†CMP.B#'A',(A0)#‰BEQ.SPADDŠJMPIFPOSSIBLEADDCMD‰CMP.B#'D',(A0)#‰BEQ.SPDELŠJMPIFPOSSIBLEDELCMD‰CMP.B#'C',(A0)/‰BEQ.SPCOPY‰JMPIFPOSSIBLECOPYORCHANGECMD‰CMP.B#'L',(A0)#‰BEQPLIST‹JMPIFPOSSIBLELISTCMD‰CMP.B#'R',(A0)%‰BEQPREPŒJMPIFPOSSIBLEREPLACECMD‰CMP.B#'Q',(A0)#‰BEQPQUIT‹JMPIFPOSSIBLEQUITCMD‰CMP.B…#'H',(A0)%‰BEQ.S…PHELP…JMPIFPOSSIBLEHELPCMD'****************************************ˆERRORININPUT '*************************************** PERR…EQU*‰BSRINVALER‰INVALIDENTRYMSG‰BRAPRETERŠERRORCONDITION*'****************************************ˆ**‚ADD‚***'**************************************** PADD…EQU*‰ADD.L#1,A0…INCADDRESS‰CMP.B#'D',(A0)‚CK2NDCHAR‰BNE.SPADD0ˆNOTADD‰BSRƒPCK ‰BRA.SPADD1 PADD0„EQU* ‰BSRPEND*PADD1„MOVE.B#1,AFLAG-PBA(A6)‚SETADDFLAG‰BRAPARSEINE„EXIT*)******************************************ˆHELP)******************************************PHELP:‰CMP.L…#'HELP',(A0) ‰BNE.S…PERR*œJMPIFNOTHELPREQUEST ‰BSET.L„#1,D0*œSETFLAG-HELPCMDREQUESTED ‰BRA‡PARSEINE*œEXITROUTINE‰PAGE)******************************************ˆ**ƒDELETE‚**)******************************************PDEL…ADD.L#1,A0‰CMP.B#'E',(A0)+ ‰BNEPERR‰CMP.B#'L',(A0) ‰BNEPERR ‰BSR.S…PCK‰MOVE.B#1,DFLAG-PBA(A6)‰BRA.S„PARSEINE*********************************************ˆ**‚COPY‚********************************************* PCOPY„EQU* ‰ADD.L#1,A0‰CMP.B#'O',(A0) ‰BEQ.SPCOPYC‰CMP.B#'H',(A0)‰BEQ.SPCHANGE ‰BRAPERR PCOPYCƒEQU* ‰BSR.SPCK‰MOVE.B#1,CFLAG-PBA(A6)‰BRA.SPARSEINE**0*************************************************ˆ**‚CHANGE‚**0*************************************************PCHANGE: ‰BSR.SPCK‰BRA.SPCHANGE1 PCHANG0‚EQU* ‰BSRPEND!PCHANGE1 MOVE.B #1,CHFLAG-PBA(A6)‰BRA.SPARSEINE*(*****************************************ˆ**‚LIST‚**(****************************************PLIST„ADD.L#1,A0‰CMP.B#'I',(A0) ‰BNE.SPLIST0 ‰BSR.SPCK ‰BRA.SPLIST1 PLIST0ƒEQU* ‰BSR.SPENDPLIST1ƒMOVE.B#1,LFLAG-PBA(A6)‰BRA.SPARSEINE‰PAGE(*****************************************ˆ**‚REPLACE‚**(****************************************PREP…ADD.L#1,A0‰CMP.B#'E',(A0) ‰BNE.SPREP0 ‰BSR.SPCK ‰BRA.SPREP1 PREP0„EQU* ‰BSR.SPENDPREP1„MOVE.B#1,RFLAG-PBA(A6)‰BRA.SPARSEINE*(*****************************************ˆ**‚QUIT‚*#*********************************** PQUIT„EQU* ‰ADD.L#1,A0‰CMP.B#'U',(A0) ‰BNE.SPQUIT0 ‰BSR.SPCK ‰BRA.SPQUIT1 PQUIT0ƒEQU* ‰BSR.SPENDPQUIT1ƒMOVE.B#1,QFLAG-PBA(A6)‰BRA.SPARSEINE**PRETER: ‰BSR‡INVM_CFC!*œCHECKFORCHAINFILEPROCESSING‰BSET#31,D0…SETNEGBIT*PARSEINE EQU * ‰RTS.RETURN**<************************************************************8*ˆPCKWALKSDOWNTHECMDLINEUNTILIFFINDSANONBLANK*ˆORISATTHEEND#*ˆTHE2NDLETTERWASCOMMANDLETTER**ˆRETURN*’GOOD*œA.CRFOLLOWEDCOMMAND!*œB.A0=ADDROFMODULETOPROCESS**‘ERROR1*œINWHICHCASERETURNFROMSUBROUTINEISREMOVED,*œFROMSTACKANDCONTROLTRANSFERREDTOPERR*8********************************************************* PCK†EQU*‰ADD.L#1,A0…INCADDR"PCK0…CMP.B#CR,(A0)‚ISITCARRRET‰BNE.SPCK1†NO"PCKSETƒBSET#0,D0†SETCARRRETBITPCKEX„RTS.RETURN*PCK1…CMP.B#SPACE,(A0)+ ‰BEQ.SPCKSP‰CMP.LA0,A1…ATEND ‰BHIPCK0ˆYES‰TST.L(A7)+…RESETSTACK ‰BRAPERRPCKSP„CMP.B#CR,(A0) ‰BEQPCKSET‰CMP.B#SPACE,(A0) ‰BNEPCKEX ‰ADD.L#1,A0‰CMP.LA0,A1…ATEND ‰BHIPCKSP‡NO ‰BRAPCKSET***0************************************************2*ˆTHISROUTINEWASCALLEDBECAUSE2NDCHARWASNOT*ˆACOMMANDLETTER**’RETURN*œGOOD*¦A.CRFOLLOWEDCOMMAND&*¦B.A0=ADDROFMODULETOBEPROCESSED**œERROR%*¦INWHICHCASETHERETURNADDRESSIS'*¦REMOVEDFROMTHESTACKANDCONTROLIS*¦TRANSFERREDTOPERR*+******************************************* PEND…EQU*‰CMP.B#CR,(A0)‚CARRRET‰BNE.SPEND1…NO!PEND0„BSET#0,D0†SETCARRRETBITPENDE„RTS.RETURN*PEND1„CMP.B#SPACE,(A0)+ ‰BEQ.SPEND2‰TST.L(A7)+…RESETSTACK ‰BRAPERRPEND2„CMP.LA0,A1…ATEND ‰BHI.SPEND3 ‰BRAPEND0PEND3„CMP.B#SPACE,(A0) ‰BNEPENDE ‰ADD.L#1,A0 ‰BRAPEND2‰PAGE.************************************************ˆADDAMODULELOGIC* '*ˆTHENEWMODULETOBEADDEDMUSTEXIST1*ˆTHENEWMODULECANNOTALREADYBEINTHELIBRARY*ˆTHENEWMODULECANBEADDED!*’ATTHEBEGINNINGOFTHELIBRARY*’ATTHEEND‡OFTHELIBRARY)*’AFTERANEXISTINGMODULEINTHELIBRARY*0************************************************* DOADD„EQU*7‰MOVE.LHOLDLOCM-PBA(A6),A0‚A0=ADDROFFILETOBEADDED ‰BTST#0,D0:‰BEQ.SDOADD1ˆJMPIFAFILENAMETOBEADDEDWASSPECIFIED-*********************************************$*ˆMSGREQUESTINGSOURCENAMEISSENT,********************************************‰LEAENTM(PC),A3‰LEAENTME(PC),A44‰BSRPRTIFORMˆREQUESTUSERTOINPUTFILETOBEADDED'‰BSRCLEARWŠSPACEFILLTHEINPUTBUFFER$‰IOSCALLOUTINIOS(PC)‚WAITFORINPUT ‰BNEIOERPRT ‰BSR‡SBARG-*œFORCELOWERCASETOUPPERCASEIFNECESSARY ‰BNE‡IOERPRT*œJMPIFSBARGERROR$‰BSRSETENDŠPUT'CR'ATENDOFINPUT/‰LEAWORKBUF(A5),A0‚A0=ADDROFFILETOBEADDEDDDOADD1ƒCLR.BADDMORE-PBA(A6)‚INITIALIZEFLAG-MOREFILESTOPROCESS‰LEASOURFHS(PC),A6;‰BSRINITDSK‰INITIALIZEPARAMETERBLOCKWITHDEFAULTVALUES/‰BSREDITFILEˆMOVEFILENAMETOPARAMETERBLOCK4‰BMI.SDOADDBAD†JMPIFERRORENCOUNTEREDINEDITFILE ‰BTST#1,D0=‰BNE.SDOADDBAD†JMPIFDEVICESPECIFIEDASSOURCEFILETOADD‰LEA‡PBA(PC),A6*œA6=PROGRAMBASEADDRESS‰CMP.B#COMMA,D1.‰BNE.SDOADD0ˆJMPIFNOMOREFILESTOBEADDED;‰MOVE.B#1,ADDMORE-PBA(A6)ƒSETFLAG-MOREFILESTOPROCESS DOADD0ƒEQU*9‰MOVE.LA0,HOLDLOCM-PBA(A6)‚A0=ADDRNEXTFILETOBEADDED@‰MOVE.W#FHASGN,SOURFHS-PBA(A6)‚SETCMDTOASSIGNFILE(OPENIT)"‰FHSCALLSOURFHS(PC)‚ASSIGNSOURCE,‰BEQ.SDOADDOK‡JMPIFFILEASSIGNED(OPENED) ‰BSR‡X10000*œCALLMESSAGEPRGM ‰BRADOADDCL1*************************************************$*ˆDETERMINEIFSOURCEALREADYINLIB1*************************************************DOADDOK: ‰BSR‡X20000*œEDITFORVALIDFILETYPE ‰BEQ‡DOADDCL*œJMPIFINPUTFILETYPEERROR ‰BSRFINDSOUR ‰CMP.L#1,D03‰BEQ.SDOADD2ˆJMPIFSOURCEMODULETOADDNOTFOUND/‰BSRMODER1ŠPRINTERRORMSG-MODULEINLIBRARY ‰BRADOADDCL DOADDBAD:‰LEA‡PBA(PC),A6 ‰BSRINVALER*œA6=PROGRAMBASEADDRESS ‰BRADOADDCL* DOADD2ƒEQU**'****************************************ˆFINDINSERTLOCATION'***************************************‰LEAADDNAM(PC),A4>‰BSRMOVMODŠMOVESOURCEMODULETOBEADDEDTOCONFIRMATIONMSG%‰TST.BLIBPREV-PBA(A6)ƒDOESLIBEXIST‰BEQADDFIRST„NOBUILDONE‰CMP.B#CR,D1ƒISITCARRRET‰BEQ.SADDTOEND„YES‰CMP.B#COMMA,D1 ‰BNE.SDOADD3.‰MOVE.B#1,ADDMORE-PBA(A6)‚SETADDMORESWITCH‰BRA.SADDTOENDDOADD3ƒCMP.B#SLASH,D1‚SLASH‰BNEDOADDBAD„NOISERROR*+‰MOVE.LHOLDLOCM-PBA(A6),A0‚RESTOREPOINTER*ˆPROCESSSLASHSEPERATOR$‰CMP.B#CR,(A0)NEXTCHARACARRRET‰BEQADDTOBEG„YES‰CMP.B#COMMA,(A0) ‰BNE.SDOADD4‰MOVE.B#1,ADDMORE-PBA(A6) ‰ADD.L#1,A0(‰MOVE.LA0,HOLDLOCM-PBA(A6)‚SAVEPOINTER ‰BRAADDTOBEG0************************************************-*ˆMODULESUPPLIEDTHEREFOREITMUSTBEINLIB*ˆORITISANERRORCONDITION0************************************************ DOADD4ƒEQU* ‰MOVE.B#1,D2 ‰BSRMODVERB ‰TST.LD0 ‰BMIDOADDCL0************************************************)*ˆVALIDMODULENAMEEXISTINMODNAMFIELD%*ˆINSERTLOCATIONISAFTERTHEMODULE1************************************************* ‰BSRFINDIND%‰TST.LDIRF-PBA(A6)ISFOUNDFLAGSET‰BNE.SDOADD5„GOOD‰BSRINSRT‡PRINTERRMSG ‰BRADOADDCL* DOADD5ƒEQU*9‰CLR.BTHRUMOD-PBA(A6)‚SETSWITCHTOCOPYTHRUTHEMODULE ‰BSRBLD1HAF%‰BSRINSSOUR…INSERTSOURCEINTMPLIB)‰BSRBLD2HAF…ADDRESTOFLIBTOTEMPFILE********************************************ˆTEMPLIBRARYISNOWCOMPLETE******************************************* ‰BRADOADDREN*3****************************************************3*ˆADDMODULETOENDOFLIBRARY(TEMPFILENOTUSED)3**************************************************** ADDTOEND:‰MOVE.L„DIRLOC-PBA(A6),D0‰CMP.L…DIREND-PBA(A6),D0 ‰BEQ‡ADDTOBEG **œJMPIFINPUTLIBRARYFILE/DIRLIBISNULL0‰MOVE.W#IOPOST,LIBRIOS-PBA(A6)‚POSITIONCOMMAND"‰MOVE.L#-1,LIBRIOS-PBA+IOSRRN(A6)&‰MOVE.W#IOPRAN,LIBRIOS-PBA+IOSOPT(A6)‰IOSCALLLIBRIOS(PC) ‰BNEIOERPRT ADDTOE1‚EQU*‰MOVE.W#IOWRIT,LIBRIOS-PBA(A6)=‰MOVE.W#IOPNXT,LIBRIOS-PBA+IOSOPT(A6)‚SETTONEXTRECOPTION‰LEA‡SOURBUF(A5),A09‰MOVE.LA0,LIBRSAD-PBA(A6)‚MOVEBUFFERADDRTOPARMBLOCK‰LEA‡SOURBUFE(A5),A0‰MOVE.LA0,LIBREAD-PBA(A6)7*******************************************************6*ˆBRANCHTOWRITESOURCEBECAUSE1STBLOCKALREADREAD7*******************************************************‰BRA.SADDTOWRTADDTORD‚IOSCALLSOURIOS(PC)‰BNE.SADDTOX1ƒCKERROR+‰BSRCK2MOD†FINDIFMORETHAN1MODROUTINE‰BNE.SADDTOWRT‚GOWRITE ‰BSRPRTMSM‰BRADOADDCK…EXIT%ADDTOX1‚CMP.B#ISTAEOF,D0‚ENDOFFILE!‰BEQDOADDCK…GOTOFINISHROUTINE ‰BRA‡IOERPRTADDTOWRT IOSCALL LIBRIOS(PC) ‰BEQADDTORD ‰BRA‡IOERPRT*.***********************************************-*ˆROUTINETOBUILDTHELIBRARYTHEFIRSTTIME*.***********************************************ADDFIRST EQU *‰CMP.B#COMMA,D1+‰BNE.SADDF1‰JMPIFONLY1FILEBEINGADDED%‰MOVE.B#1,ADDMORE-PBA(A6)‚SETSWITCH ADDF1„EQU*8‰MOVE.W#FHALLO+FHASGN,LIBFHS-PBA(A6)‚ALLOC&ASSIGNLIB0‰AND.W#$FFFF-FFTBIT,LIBFHS-PBA+FHSOPT(A6)‚CLEAR6‰OR.W#FOPSEQ,LIBFHS-PBA+FHSOPT(A6)‚SETOPTSEQUENTIAL5‰MOVE.L#0,LIBFHS-PBA+FHSSIZ(A6)‚SETSIZETONONCONT5‰MOVE.W#256,LIBFHS-PBA+FHSLRL(A6)‚RECORDSIZEIS256‰FHSCALLLIBFHS(PC)‰BNEIOERPRT…ERROR‰MOVE.B#1,LIBPREV-PBA(A6)‰MOVE.B#1,DIREXIST-PBA(A6)‰BRAADDTOE1…GOADDTOFILE**2****************************************************ˆADDTOFRONTOFLIBRARY*-**********************************************ADDTOBEG EQU * *º10/24/83-*ˆdoweneedtoallocthetempfile?10/24/83 *º10/24/83‰BSR‡INITCONT 10/24/83 *º10/24/83‰LEA‡SOURBUF(A5),A0‰MOVE.LA0,TEMPSAD-PBA(A6)‰LEA‡SOURBUFE(A5),A0!‰MOVE.LA0,TEMPIOS-PBA+IOSEAD(A6)2**************************************************1*ˆWRITETEMP1STBECAUSESOURCEALREADYREADINTO*ˆBUFFERBEFORECOMINGHERE1************************************************* ADDTOB1‚EQU**ˆWRITETOTEMPFILE‰IOSCALLTEMPIOS(PC)‰BEQ.SADDTOBRƒGOTOREAD ‰BRA‡IOERPRT'ADDTOBR‚IOSCALLSOURIOS(PC)‚READSOURCE‰BNE.SADDTOX2ƒCKFORERR ‰BSRCK2MOD‰BNEADDTOB1…GOWRITE ‰BSRPRTMSM‰BRA.SADDTOB2ƒFINISHIT* ADDTOX2‚CMP.B#ISTAEOF,D0‚ATEND ‰BNE‡IOERPRT*œJMPIFERROROTHERTHANEOF* ADDTOB2‚EQU*7‰MOVE.B#1,RD1ST-PBA(A6)‚SET1STRECORDNOTINBUFFLAG ‰BSRBLD2HAF*DOADDREN EQU *‰BSRRENAMLIB„CHANGTMPTOLIB DOADDCK‚EQU*‰BSR.SADDTODIR#‰BSR.SADDGOOD…PRINTSUCCESSFULMSG‰LEA‡LIBBUF(A5),A07‰MOVE.LA0,LIBRSAD-PBA(A6)‚RESETLIBADDRINPARMBLOCK‰LEA‡LIBBUFE(A5),A0‰MOVE.LA0,LIBREAD-PBA(A6) DOADDCL‚EQU*%**************************************ˆCLOSESOURCEFILE%************************************* ‰BSRCLOSSOUR$‰TST.BADDMORE-PBA(A6)ƒANYMOREADDS‰BEQ.SDOADDAM…NO*#DOADDRW‚BSRREWINDL…REWINDLIBFILE)‰MOVE.LHOLDLOCM-PBA(A6),A0ƒRESETPOINTER‰BRADOADD1‹GOPROCNEXT**** DOADDAM‚EQU*%‰BSR.SCKMORE†CKFORMOREINCNDLINE ‰TST.BD0‰BEQDOADDRW…YES*DOADDEXƒRTSŒ.RETURN**6*******************************************************.*ˆROUTINETOMOVEMODULENAMETOTHEDIRECTORY+*ˆAFTERTHEMODULEWASADDEDTOTHELIBRARY*6******************************************************* ADDTODIR: ‰MOVE.L„A6,A3*œA3=PROGRAMBASEADDRESS*‰TST.BDIREXIST-PBA(A3)‚DOESTHEDIREXIST‰BEQ.SADDTODEX‚NO‰MOVE.LDIREND-PBA(A3),A6‰LEADIRLIBE(A5),A5 ‰CMP.LA6,A5‰BHI.SADDTOD1‰MOVE.B#1,DIRFULL-PBA(A3)‰BSRLIBFULRT„PRINTMSG‰BRA.SADDTODEXADDTOD1ƒLEAADDNAM(PC),A3ƒINIT‰MOVE.L(A3)+,(A6)+‰MOVE.L(A3)+,(A6)+‰MOVE.W(A3)+,(A6)+‰MOVE.W#'**',(A6)+‰LEA‡PBA(PC),A3*œA3=PROGRAMBASEADDRESS‰MOVE.LA6,DIREND-PBA(A3)*‰MOVE.B#1,DIRCHG-PBA(A3)…SETCHANGEDFLAG =‰CLR.WTOTMOD-PBA(A6)„CLEARTOTALSOFDIRCOUNT'ITSCHANGED' ADDTODEX:‰LEA‡PBA(PC),A6*œA6=PROGRAMBASEADDRESS‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDRESS ‰RTS.RETURN***1**************************************************%*ˆROUTINETOPRINTADDSUCCESSFULMSG*ˆMODULENAMEISALREADYINMSG*1*************************************************ADDGOOD‚LEA…ADDMSG(PC),A3‰LEA…ADDMSGE(PC),A4 ‰BSRMSGPRT‰RTS**+********************************************)*ROUTINE TO CHECK FOR START OF NEW MODULE6*ˆSTATUSCONDITIONOFEQUALONMEANSNEWNODWASFOUND*+*******************************************CK2MODƒLEASOURBUF(A5),A0‰CMP.B#'1',1(A0)‚TYPE1RECORD‰BNE.SCK2MODEX‚GETOUT‰LEA2(A0),A0„INITFORCALL ‰BSRMODVER‰TST.BD0ˆSETSTATUSCK2MODEXRTS.RETURN***0*************************************************4*ˆROUTINETOCHECKFORACOMMAASTHENEXTCHARACTER*0************************************************* CKMOREƒEQU* ‰MOVE.B#1,D0‰MOVE.LHOLDLOCM-PBA(A6),A0‰CMP.B#COMMA,(A0)+‰BNE.SCKMOREX‰MOVE.LA0,HOLDLOCM-PBA(A6)‰CLR.BD0ˆSETCONDITIONCKMOREX‚RTS.RETURN‰PAGEA******************************************************************6*ˆWILLBUILDTHETEMPLIBRARYFROMTHE‚STARTUPTOTHE**‰MODULENAMEINMODNAM.IFSWITCHTHRUMOD,*ˆISZEROITWILLGOTHRUTHISMODOTHERWISE**ˆITWILLEXITATTHESTARTOFTHISMODULE*A****************************************************************** BLD1HAF‚EQU*!‰CLR.BBLD1END-PBA(A6)ƒCLEARFLAG‰CLR.BATMOD-PBA(A6)…CLEARFLAG‰LEALIBBUFE(A5),A4‚BUFEND‰LEALIBBUF(A5),A5ƒBUFSTART0‰MOVE.LA5,TEMPSAD-PBA(A6)‚MOVETOTMPFILEPARM‰MOVE.LA4,TEMPEAD-PBA(A6)1‰AND.W#$FFFF-IOPPOS,LIBRIOS-PBA+IOSOPT(A6)‚CLEAR$‰OR.W#IOPNXT,LIBRIOS-PBA+IOSOPT(A6)BLD1RDƒIOSCALLLIBRIOS(PC)‰BEQ.SBLD1A…GOOD‰CMP.B#ISTAEOF,D0‚ATEND ‰BNE‡IOERPRT*œJMPIFERROROTHERTHANEOF4BLD1E„MOVE.B#1,BLD1END-PBA(A6)‚SETENDREACHEDFLAG'‰TST.BATMOD-PBA(A6)…ATINSERTFLAGSET‰BNE.SBLD1EX‡OK‰LEAINSENDM(PC),A3‰LEAINSENDME(PC),A4 ‰BSRMSGPRT ‰BRA.SBLD1EX* BLD1A„EQU*‰MOVE.W(A5),D3‰CMP.B#'1',D3ƒTYPE1RECORD‰BNE.SBLD1WRT…NO%‰LEA2(A5),A0ƒINITFORMODVERROUTINE‰BSRMODVER†VERIFYMODNAME‰TST.BD0ˆGOOD‰BNE.SBLD1WRT…NO‰TST.BATMOD-PBA(A6)…ATINSERT‰BNE.SBLD1EX†YES!‰MOVEM.L(A5),D3-D5‚SAVEMODNAME(*ˆCOMPAREMODULENAMETOINSERTMODNAME‰CMP.WMODNAM-PBA(A6),D3‰BNE.SBLD1WRT‰CMP.LMODNAM+2-PBA(A6),D4‰BNE.SBLD1WRT‰CMP.LMODNAM+6-PBA(A6),D5‰BNE.SBLD1WRT)‰TST.BTHRUMOD-PBA(A6)ƒTHROUGHSWITCHSET‰BNE.SBLD1EX„NO-‰MOVE.B#1,ATMOD-PBA(A6)‚SETEXITNEXTSWITCH********************************************ˆWRITETOTEMPARYFILE******************************************* BLD1WRT‚EQU**4*ˆiftempfilehasn'tbeenassignedgodoit‰10/24/83 *º10/24/83‰BSR‡INITCONT 10/24/83 *º10/24/83‰IOSCALLTEMPIOS(PC) ‰BEQBLD1RD ‰BRA‡IOERPRTBLD1EX:‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDRESS ‰RTS.RETURN‰PAGE1*************************************************$*ˆALLOCATE&ASSIGNTHETEMPORYFILE0*************************************************ASSGNTMP EQU * *º10/24/83/*ˆsetflagtempfilehasbeenassignedŽ10/24/83 *º10/24/83 ‰CLR.B…TEMPIOSF-PBA(A6)˜10/24/83 *º10/24/83%‰MOVE.W#FHASGN+FHALLO,TMPFHS-PBA(A6)‰FHSCALLTMPFHS(PC) ‰BNEIOERPRT ‰RTS.RETURN‰PAGE'*****************************************ˆTHISROUTINEWILL>*’CHECKFORASOURCEMODULEINTHEDIRECTORYDIRLIBIFITEXIS>*’IFNODIRECTORYEXISTONEWILLBEBUILT(DIRLIB)ANDCHECKED2*’IFDIRECTORYOVERFLOWEXISTTHEREMAINDEROFTHE0*œLIBRARYWILLBESEARCHEDFORTHESOURCEMODULE4*’IFFOUNDTHEMODULENAMEWILLBEMOVEDTO'MODNAM'**ˆSTATUS*’D0ˆ1==>MODULENOTFOUND*œ0==>MODULE…FOUND*›-1==>ERRORCONDITION*3*****************************************************FINDSOUR‚EQU*‰TST.BDIREXIST-PBA(A6)$‰BNE.SFINAŠJMPIFADIRECTORYEXIST ‰BSRBUILDDIRˆBUILDADIRECTORY%FINA…LEADIRLIB(A5),A5ƒINITDIRSTART6FINRD„IOSCALLSOURIOS(PC)‚READRECDFROMSOURCEMODULE ‰BNE‡IOERPRT*œJMPIFERRORFINB:‰MOVE.L„A3,-(A7)‰MOVE.L„AS_ADDR-PBA(A6),A3 *œSAVEREG*œA3=ALLOCATEDSEGMENTADDRESS)‰MOVEM.LSOURBUF+2(A3),D3-D5‚GETMODNAME‰MOVE.L„(A7)+,A3*œRESTOREREGADDRESS‰MOVEM.LD3-D5,MODNAM-PBA(A6)$*œMODNAMCONTAINSSOURCEMODULENAME‰TST.BLIBPREV-PBA(A6)%‰BEQ.SFINSNOˆJMPIFNOLIBRARYEXIST#‰BSRFINDIND‰SEARCHFORMODULENAME‰TST.LDIRF-PBA(A6):‰BNE.SFINNOMOD†JMPIFSOURCEMODULETOBEADDEDWASFOUND‰TST.BDIRFULL-PBA(A6),‰BEQ.SFINSNOˆJMPIFSOURCEMODULENOTFOUND$‰TST.BDIROPT-PBA(A6)„NODIROPTSET‰BNE.SFINC†YES-FINSNOƒMOVE.L#1,D0„SETMODULENOTFOUNDFLAG ‰BRA.SFINSEX FINC…EQU*0‰MOVE.B#1,RLMSG-PBA(A6)‚SETDONTPRINTMSGFLAG2‰BSRREADLIB…GOREADTHEREMAINDEROFLIB&SEARCH‰CLR.BRLMSG-PBA(A6) ‰TST.LD0*‰BNEFINSNOŠJMPIFSOURCEMODULENOTFOUND$FINNOMODƒCLR.LD0ˆSETFOUNDMODFLAGFINSEX:‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDRESS ‰RTS.RETURN‰PAGE4*****************************************************.*ˆROUTINETOMOVESOURCEFILETOTEMPLIBFILE.*ˆTHEFIRSTSECTOROFTHESOURCEISALREADYIN2*ˆTHESOURCEBUFFER&THEMODULENAMEWASVEFIFIED-*ˆTHATITDIDN'TALREADYEXISTINTHELIBRARY*5******************************************=***********INSSOUR:*4*ˆiftempfilehasn'tbeenassignedgodoit‰10/24/83 *º10/24/83‰BSR‡INITCONT 10/24/83 *º10/24/83‰LEA‡SOURBUFE(A5),A0‰MOVE.L„A0,TEMPEAD-PBA(A6)‰LEASOURBUF(A5),A5:‰MOVE.LA5,TEMPSAD-PBA(A6)‚SOURCESTARTADDRTOPARMBLOCK‰MOVE.W#IOREAD,SOURIOS-PBA(A6)/INSSWRT‚IOSCALLTEMPIOS(PC)WRITESOURCETOTMP ‰BNE‡IOERPRT*œJMPIFERROR%INSSA„IOSCALLSOURIOS(PC)READSOURCE ‰BNE.SINSSA1‰BSRCK2MOD†CKFOREND‰BNEINSSWRT…GOWRITE‰BSRPRTMSM†PRTWARNIMGMSG ‰BRA.SINSSEXINSSA1ƒCMP.B#ISTAEOF,D0‚ATEND ‰BNE‡IOERPRT*œJMPIFERROROTHERTHANEOFINSSEX:‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDRESS‰RTS.RETURNFROMINSSOUR‰PAGE6*******************************************************3*ˆROUTINETOBUILDTHE2NDHALF(PARTAFTERINSERT)*‰OFNEWLIBRARYFILE*5*****************************************************>*ˆTHELIBBUFMUSTALREADYCONTAINTHE1STRECORDTOBEWRITTEN$*ˆORTHEFLAGRD1STMUSTBENONZERO BLD2HAF‚EQU*$‰TST.BBLD1END-PBA(A6)ƒATENDOFLIB‰BEQ.SBLD2OK„NO‰CLR.BBLD1END-PBA(A6)‰BRA.SBLD2EX†GETOUT* BLD2OKƒEQU*‰MOVE.W#IOREAD,LIBRIOS-PBA(A6)‰LEA‡LIBBUFE(A5),A0‰MOVE.LA0,TEMPEAD-PBA(A6)‰LEALIBBUF(A5),A5ƒINIT3‰MOVE.LA5,TEMPSAD-PBA(A6)‚INITPARMBLOCKINWRITE1‰AND.W#$FFFF-IOPPOS,LIBRIOS-PBA+IOSOPT(A6)‚CLEAR$‰OR.W#IOPNXT,LIBRIOS-PBA+IOSOPT(A6) BLD2WRT‚EQU*"‰TST.BRD1ST-PBA(A6)…READFLAGSET‰BEQ.SBLD2WRTG‚NOWRITEIT‰CLR.BRD1ST-PBA(A6)…CLEAR‰BRA.SBLD2RD„GOREAD*(*****************************************ˆWRITETOTEMPFILE$************************************BLD2WRTG EQU **4*ˆiftempfilehasn'tbeenassignedgodoit‰10/24/83 *º10/24/83‰BSR‡INITCONT 10/24/83 *º10/24/83‰IOSCALLTEMPIOS(PC) ‰BNE‡IOERPRT*œJMPIFERROR+********************************************ˆREADFROMLIBRARYFILE+*******************************************BLD2RDƒIOSCALLLIBRIOS(PC)‰BEQ.SBLD2WRTƒGOOD‰CMP.B#ISTAEOF,D0‚ATEND ‰BNE‡IOERPRT*œJMPIFERROROTHERTHANEOFBLD2EX:‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDRESS ŠRTSŒ.RETURN*‰PAGE7********************************************************:*ˆROUTINETORENAMETHETEMPFILETOTHELIBRARYFILENAME3*ˆTHEOLDLIBRARYISDELETEDANDTHENTHETEMPFILE *ˆISRENAMEDTOTHELIBRARYNAME3*ˆIFANYPROBLEMSARISETHETEMPFILEISRENAMEDTO*‰AFILECALLEDTEMPLIB*7********************************************************RENAMLIB EQU *3‰MOVE.LLIBCAT-PBA(A6),TMPCAT-PBA(A6)…MOVECATNAME)‰MOVE.LLIBCAT+4-PBA(A6),TMPCAT+4-PBA(A6) ;‰MOVE.LLIBNAME-PBA(A6),TMPNAME-PBA(A6)‚SETNAMEFORRENAME+‰MOVE.LLIBNAME+4-PBA(A6),TMPNAME+4-PBA(A6)6‰MOVE.WLIBEXT-PBA(A6),TMPEXT-PBA(A6)‚MOVEEXTENTNAME&‰MOVE.W#FHRENM,TMPFHS-PBA(A6)‚SETCMD ‰BSRCLOSLIB…CLOSEBEFOREDELETE4‰MOVE.W#FHDELT,LIBFHS-PBA(A6)DELETECMDTOLIBFHS+********************************************ˆDOCALLTODELETEOLDLIBRARY+*******************************************‰FHSCALLLIBFHS(PC) ‰BEQ.SRENAM1 RENAMER1: ‰BSR‡X10000)*œOUTPUTERRORMESSAGEVIAERRORMSGPRGM‰BSR.SCREATTMP"‰BRATERMINAT„EXITLIBRARYPROGRAM *ˆGOODDELETE RENAM1ƒEQU*‰FHSCALLTMPFHS(PC) ‰BNERENAMER1'****************************************ˆCHANGELOGUNITASSGN'***************************************‰FHSCALLCHGLUFHS(PC) ‰BNE‡IOERPRT*œJMPIFFHSERROR *Ä10/24/83)*ˆsetflagtoallocnewtempfilež10/24/83 *Ä10/24/83$‰MOVE.Bƒ#1,TEMPIOSF-PBA(A6) 10/24/83 *Ä10/24/83 ‰BSRINITCONT„REASSIGNTEMPFILE1‰CLR.BNEWLIB-PBA(A6)„CLEARCREATENEWLIBSWITCH‰RTS.RETURNFROMRENAMLIB‰PAGE9**********************************************************@*ˆROUTINETOCREATEAFILECALLEDTEMPLIBFROMTHEINTERMEDIATE/4*ˆNEWLIBRARYBECAUSEOFINABILITYTORENAMETHEOLD*ˆLIBRARYFILE*9**********************************************************CREATTMP EQU *‰BSRTEMPER…PRINTERRORMSG7‰MOVE.L#'TEMP',TMPNAME-PBA(A6)‚MOVENAMETOPARMBLOCK!‰MOVE.L#'LIB',TMPNAME+4-PBA(A6)-‰MOVE.W#'RO',TMPEXT-PBA(A6)‚CHANGEEXTENSION%CREATT1‚MOVE.W#FHRENM,TMPFHS-PBA(A6)‰FHSCALLTMPFHS(PC)‰BEQ.SCREATTEX„GOOD*‰CMP.B#FSTADNM,D0‚DOESFILEALREADYEXITS‰BNEIOERPRT…NO‰MOVE.W#FHDELT,TMPFHS-PBA(A6)‰FHSCALLTMPFHS(PC) ‰BEQCREATT1 ‰BRAIOERPRT!CREATTEX‚RTS.RETURNFROMCREATE‰PAGE5******************************************************#*ˆCHANGDATAINLIBMODULESROUTINE1*‰THEMODULEVERSION#REVISION#ANDDESCRIPTION*ˆCANBECHANGEDINAMODULE*5****************************************************** DOCHG„EQU*)‰TST.BLIBPREV-PBA(A6)ƒDOESOLDLIBEXIST‰BNE.SDOCHG1„YES‰BSRNOLIB‡ERRORMSG‰BRADOCHGEX…EXIT*!DOCHGER‚BSRINVALER…PRTERRORMSG‰BRADOCHGX…EXIT* DOCHG1ƒEQU*‰BTST#0,D0†MODNAMEGIVEN‰BEQ.SDOCHG2„YES‰BSRMODMIS†PRTMSG‰BRADOCHGEX…EXIT-DOCHGCL‚CLR.BMORECHA-PBA(A6)ƒCLEARMOREFLAG‰BRA.SDOCHGS„CONTINUE* DOCHG2ƒEQU*1‰MOVE.LHOLDLOCM-PBA(A6),A0‚INITCMDLINEPOINTER DOCHGLOP:"‰CLR.BFLAGCND-PBA(A6)ƒNODIRFLAG‰BSRMODVERB…VALMODNAME*œD2=LOWORDERBYTEISNONZERO‰TST.LD0ˆGOOD‰BMI‡DOCHGX‰NO *ˆMOVEMODULENAMETOCHANGEMSG‰LEAENTCHGM(PC),A4‰BSRMOVMOD†GOMOVEMODNAM‰CMP.B#COMMA,(A0)‚MOREITEMS‰BNE.SDOCHGCLƒNO$‰TST.BMORECHA-PBA(A6)ƒALREADYSAVED ‰BNE.SDOCHGS*‰MOVE.B#1,MORECHA-PBA(A6)„SETMORESWITCH*ˆSAVETHECOMMANDLINE‰LEAWORKBUF(A5),A3‰LEASOURBUF(A5),A4‰LEAWORKBUFE(A5),A5‚ENDDOCHGL2‚MOVE.L(A3)+,(A4)+‰CMP.LA3,A5…ATEND ‰BHIDOCHGL2‰MOVE.L„AS_ADDR-PBA(A6),A5!*œA5=ADDRESSOFALLOCATEDSEGMENT DOCHGSƒEQU*(‰MOVE.LHOLDLOCM-PBA(A6),A0‚SAVEPOINTER ‰BSR‡X30000*œEDITFORNULLDIRECTORY)‰TST.BDIREXIST-PBA(A6)‚DOESTHEDIREXIT$‰BEQDOCHGND…NO-PROCWITHOUTADIR%‰TST.BDIRCHG-PBA(A6)„HASDIRCHANGED‰BEQ.SDOCHG3‰NO‰BSRBUILDDIR‰GOBUILDDIR DOCHG3ƒEQU*0************************************************'*ˆLIBRARYDOESEXISTPROCESSINGFOLLOWS0************************************************‰BSRFINDIND…FINDINLIB‰TST.LDIRF-PBA(A6)†FOUND‰BEQDOCHGX…ERRORNOTFOUND9‰MOVE.LDIRF-PBA(A6),PREVDIRF-PBA(A6)ƒSAVELOCFORCHANGE*/‰MOVE.W#IOREAD,LIBRIOS-PBA(A6)‚INITPARMBLOCK&‰MOVE.W#IOPRAN,LIBRIOS-PBA+IOSOPT(A6)%‰MOVE.W(A1),LIBRIOS-PBA+IOSRRN+2(A6))******************************************ˆREADLIBRARYCORRECTMODULE)*****************************************DOCHGRD‚IOSCALLLIBRIOS(PC) ‰BNE‡IOERPRT*œJMPIFERROR*1*************************************************(*ˆFOLLOWINGCODEISTOGETINPUTFORNEW *ˆMODULEVERSIONREVISION&DESC 1************************************************* DOCHGOK‚EQU*‰LEAENTCHGM(PC),A3‰LEAENTCHGME(PC),A4 ‰BSRPRTIFORM‰BSRCLEARW†CLEARINPUTAREA‰IOSCALLOUTINIOS(PC)RECINPUT‰BNEIOERPRT…ERROR ‰BSR‡SBARG/*œCONVERTLOWERCASETOUPPERCASEIFNECESSARY ‰BNE‡IOERPRT*œJMPIFSBARGERROR$‰BSRSETENDŠPUT'CR'ATENDOFINPUT%‰CMP.B#CR,WORKBUF(A5)‚CARRRETINPUT‰BEQ.SDOCHGV„YESGETVERSION‰LEAWORKBUF(A5),A04‰MOVE.LHOLDLOCM-PBA(A6),-(A7)‚SAVECMDLINEPOINTER‰BSRMODVERB…VERNAME*œD2=LOWORDERBYTEISNONZERO‰MOVE.L(A7)+,HOLDLOCM-PBA(A6) ‰TST.LD0‰BMI.S…DOCHGOK4‚ERRORTRYAGAIN‰MOVE.B#1,NPFLAG-PBA(A6)#‰BSRFINDINDŠISNAMEINDIRALREADY+‰CLR.BNPFLAG-PBA(A6)‰CLEARNOPRTMSGFLAG‰TST.LDIRF-PBA(A6)‰BEQ.SDOCHGMVˆNO‰BSRMODER1‹PRTERRMSG DOCHGOK4: ‰BSR‡INVM_CFC!*œCHECKFORCHAINFILEPROCESSING‰BRADOCHGOKŠTRYAGAIN* DOCHGMV‚EQU******************************** *ˆGOODINPUT******************************‰LEALIBBUF+2(A5),A42‰MOVE.LPREVDIRF-PBA(A6),A5†LOCOFMODNAMEINLIB‰LEAMODNAM(PC),A37*******************************************************-*ˆMOVEMODULENAMETODATARECORD&DIRECTORY7*******************************************************‰MOVE.L(A3),(A5)+„MOVETODIR"‰MOVE.L(A3)+,(A4)+ƒMOVETORECORD‰MOVE.L(A3),(A5)+‰MOVE.L(A3)+,(A4)+‰MOVE.W(A3),(A5)‰MOVE.W(A3),(A4)‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDR+********************************************ˆREQUESTVERSIONNUMBER+******************************************* DOCHGVƒEQU**MOVE OLD VALUE TO MSG ‰CLR.LD0‰MOVE.BLIBBUF+12(A5),D0 ‰MOVE.L#3,D1‰LEAENTCM1+4-PBA(A6),A0 ‰BSRBINDECFJ‰LEAENTCM1(PC),A3‰LEAENTCM1E(PC),A4$‰BSRVCHGˆGOTOPROC&VALIDROUTINE‰TST.LD2ˆCKFORNORESPONSE ‰BMI.SDOCHGR‰TST.LD0ˆGOOD‰BMI.SDOCHGVE‚NO'‰MOVE.BD0,LIBBUF+12(A5)‚MOVETORECORD ‰BRA.SDOCHGRDOCHGVE‚BSR‡INV_NTRY‰BRADOCHGV†TRYAGAIN*2***************************************************ˆREQUESTREVISIONNUMBER-********************************************* DOCHGRƒEQU**ˆMOVEOLDREV#TOMSG ‰CLR.LD0‰MOVE.BLIBBUF+13(A5),D0 ‰MOVE.L#3,D1‰LEAENTCM2+4-PBA(A6),A0 ‰BSRBINDECFJ‰LEAENTCM2(PC),A3‰LEAENTCM2E(PC),A4‰BSRVCHGˆGOTOVER&PROCROUT‰TST.LD2ˆCKFORNORESP‰BMI.SDOCHGD‚CONTTONEXT ‰TST.LD0‰BMI.SDOCHGRE‚ERROR)‰MOVE.BD0,LIBBUF+13(A5)‚MOVETODATAREC ‰BRA.SDOCHGDDOCHGRE‚BSR‡INV_NTRY‰BRADOCHGR†TRYAGAIN**,*********************************************ˆGETDESCRIPTION,********************************************* DOCHGDƒEQU*‰CLR.LD3ˆINIT%‰MOVE.BLIBBUF(A5),D3‚GETSIZEOFREC‰SUB.B#44,D3„SUBOFFSET$‰BLS.SDOCHGMOV„EXIT-NODESCEXIST‰CMP.B#80,D3„>THAN80‰BCS.SDOCHGD1!‰MOVE.B#80,D3ƒSETSIZEMAXTO80 DOCHGD1‚EQU**˜PRTOLDDESCRIPTION‰LEALIBBUF+44(A5),A3‰LEA0(A3,D3),A4 ‰BSRMSGPRT‰MOVE.LD3,D0„VALTOBECONV‰MOVE.L#2,D1„RECFIELDSIZE‰LEAENTCM3C(PC),A0‚RECLOC ‰BSRBINDECFJ‰LEAENTCM3(PC),A3‰LEAENTCM3E(PC),A4 ‰BSRMSGPRT‰LEAWORKBUF(A5),A3 ‰ADD.LD3,A3<‰MOVE.LA3,OUTINIOS-PBA+IOSEAD(A6)‚MOVEBUFENDTOPARBLOCK‰IOSCALLOUTINIOS(PC) ‰BNEIOERPRT ‰BSR‡SBARG/*œCONVERTLOWERCASETOUPPERCASEIFNECESSARY ‰BNE‡IOERPRT*œJMPIFSBARGERROR$‰BSRSETENDŠPUT'CR'ATENDOFINPUT‰LEA‡WORKBUFE(A5),A3*‰MOVE.LA3,OUTINIOS-PBA+IOSEAD(A6)„RESTORE*‰LEAWORKBUF(A5),A3#‰CMP.B#CR,(A3)‚1STCHARACARRRET‰BEQ.SDOCHGMOV‚YESBYPASSDESC‰LEALIBBUF+45(A5),A4.DOCHGDL‚MOVE.B(A3)+,(A4)+‚MOVEDESCTOBUFFER‰SUB.B#1,D3…DECTOTALCOUNT‰BEQ.SDOCHGMOV‰CMP.B#CR,(A3)‚ATEND%‰BEQ.SDOCHGBLK‚GOBLANKRESTOFLINE‰BRADOCHGDL…GETNEXTDOCHGBLK MOVE.B #' ',(A4)+ ‰SUB.B#1,D3 ‰BHIDOCHGBLK*.***********************************************ˆWRITEOUTRECORD.**********************************************DOCHGMOV EQU *'‰TST.BFLAGCND-PBA(A6)ƒNODIRPROCREQ?‰BNEDOCHGND2„YES‰MOVE.W#IOUPDR,LIBRIOS-PBA(A6)DOCHGWRT IOSCALL LIBRIOS(PC)  ‰BNE‡IOERPRT*œJMPIFERROR DOCHGXƒEQU*‰MOVE.W#IOREAD,LIBRIOS-PBA(A6)*****‰TST.BMORECHA-PBA(A6)ƒANYMORETOPROCESS‰BEQ.SDOCHGEXƒNO&***************************************ˆRESTORECOMMANDLINE*******************************‰LEAWORKBUF(A5),A3‰LEASOURBUF(A5),A4‰LEAWORKBUFE(A5),A5DOCHGFB‚MOVE.L(A4)+,(A3)+‰CMP.LA3,A5…ATEND ‰BHIDOCHGFB‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDRESS ‰BSRCKMORE ‰TST.BD0 ‰BEQDOCHGLOP**DOCHGEX:‰CLR.W…LIBRIOS-PBA+IOSOPT(A6)!*œCLEARRANDOMRECORDREADOPTION ‰RTS.RETURN‰PAGE******************************************** *ˆROUTINETO*’VERIFYVERSION‚NUMBER*™REVISIONNUMBER**ˆOUTPUT'*’D2=NEGATIVEVALUE-->NODATAINPUT*)*’D1=NEGATIVEVALUE-->ERRORCONDITION$*—POSITIVEVALUE-->CONVERTEDVALUE*)****************************************** VCHG…EQU* ‰CLR.LD0 ‰BSRPRTIFORM ‰BSRCLEARW#‰IOSCALLOUTINIOS(PC)‚RECEIVEINPUT‰BNEIOERPRT…ERROR ‰BSR‡SBARG/*œCONVERTLOWERCASETOUPPERCASEIFNECESSARY ‰BNE‡IOERPRT*œJMPIFSBARGERROR$‰BSRSETENDŠPUT'CR'ATENDOFINPUT‰CLR.LD1ˆINIT‰MOVE.L„#-2,D2*œD2=PROCESSINGFLAG*¦-2=INITIALIZESTATE*¦-1=PROCESSINGUNITSPOSITION*§0=PROCESSINGTENS‚POSITION*§1=PROCESSING100'SPOSITION!*¦>1=PROCESSINGBALANCEOFNUMBER ‰SUB.L…#1,A0)*œA0=ADDROFUNITSPOSITIONIFDATAINPUTV0100: ‰MOVE.L„A5,A3‰ADD.L…#WORKBUF,A3*œA3=LASTADDRTOPROCESS ‰CMP.L…A3,A0 ‰BLO.S…VCHGEX*œJMPIF„A01 ‰MULU†#100,D1*œHUNDRED'SDIGITTIMESHUNDRED ‰BRA.S…V0500*œPROCESSHUNDREDSPOSITIONV0400:‰MULU†#1000,D1V0500: ‰ADD.L…D1,D0*œD0=ACCUMULATEDVALUE ‰CMP‡#255,D0 ‰BLS.S…V0100*œJMPIFD0*ˆTHISROUTINEWILLGETANIDENTIFICATIONRECORD'31'(TYPE1)1*ˆ&MATCHTHEMODULENAMEWITHTHENAMEINMODNAM(*ˆIFMATCHFOUNDD0=0OTHERWISED0=1*4***************************************************** READLIB‚EQU* ‰MOVE.L#-1,D6ƒINITSECTORCOUNTREADLIB1EQU*‰IOSCALLLIBRIOS(PC)‰BEQ.SREADLGO‰CMP.B#ISTAEOF,D0‚ENDOFFILE‰BNEIOERPRT…NO‰TST.BPASSS2-PBA(A6) ‰BEQ.SNOMOD ‰BSRREWINDL‰CLR.BPASSS2-PBA(A6)‰CLR.WSECTCNT-PBA(A6) ‰BRAREADLIB NOMOD„EQU*+‰TST.BRLMSG-PBA(A6)…PRINTMSGNOMODFOUND ‰BNE.SNOMOD1 ‰BSRNOMODFND NOMOD1ƒEQU* ‰MOVE.L#1,D0‰BRA.SREADLEXREADLGO:‰LEALIBBUFE(A5),A6‰LEALIBBUF(A5),A5‰ADD.W#1,D6…INCSECTOR# ‰CMP.B#'1',1(A5)‚CKRECORDTYPE ‰BEQ.SREADID ‰BRAREADLIB1 READIDƒEQU*‰LEA2(A5),A0„INIT8‰BSRMODVER†GOVERIFYMODULEWILLLEAVEMODNAMEIND3-D5 ‰TST.LD0ˆOK ‰BNEREADLIB1‰SWAPD5*(*ˆCHECKMODULENAMEFORMATCHWITHINPUT*‰CMP.LMODNAM-PBA(A6),D3 ‰BNEREADLIB1‰CMP.LMODNAM+4-PBA(A6),D4 ‰BNEREADLIB1‰CMP.WMODNAM+8-PBA(A6),D5 ‰BNEREADLIB1‰CLR.LD0ˆSETFOUNDREADLEX:‰MOVE.L„AS_ADDR-PBA(A6),A5*œA5=ALLOCATEDSEGMENTADDRESS‰RTS.RETURNFROMREADLIB‰PAGE5******************************************************;*ˆTHISROUTINEPRINTSTHEMODULEDATAFROMTHELISTCOMMAND*ˆA5POINTSATSTARTOFRECORD*5******************************************************PRINTMOD EQU * ‰LEA2(A5),A3'****************************************ˆMOVEMODULENAME'***************************************‰MOVE.L(A3)+,LISTMOD-PBA(A6)‰MOVE.L(A3)+,LISTMOD+4-PBA(A6)‰MOVE.W(A3)+,LISTMOD+8-PBA(A6) *ˆVERSION# ‰CLR.LD0‰MOVE.B(A3)+,D0‰MOVE.L#3,D1„RECSIZE‰LEALISTVER(PC),A0 ‰BSRBINDECFJ******************************************** *ˆREVISION#*******************************************‰MOVE.B(A3)+,D0 ‰MOVE.L#3,D1‰LEALISTREV(PC),A0 ‰BSRBINDECFJ‰MOVE.B(A3)+,LISTLANG-PBA(A6)‰MOVE.L„A3,-(A7)*œA3=ADDROFVOLUMENAME*,*********************************************ˆDESCRIPTIONUPTO50CHAR,********************************************‰LEALISTDESC(PC),A1 ‰LEALISTDESE(PC),A2‚ENDOFDESC‰ADD.L#30,A3„POSITTODESC‰MOVE.B(A5),D0‚GETRECSIZE‰SUB.B#44,D0SUBOFFSET ‰BLS.SPRINTMS…BRNODESCRIPTION‰CMP.B#50,D0„>THAN50‰BCS.SPRINTMM‰MOVE.B#50,D0 PRINTMM‚EQU*‰MOVE.B(A3)+,(A1)+ ‰SUB.B#1,D0 ‰BNEPRINTMMPRINTMS‚CMP.LA1,A2…ATEND‰BCS.SPRINTIT„YES‰MOVE.B#SPACE,(A1)+ ‰BRAPRINTMS*PRINTIT‚TST.BFLAGH-PBA(A6)‰BNE.S  PRINTDET.‰MOVE.B#1,FLAGH-PBA(A6)TURNOFFPRINTHEADER ‰BSRƒPRTTITLPRINTDETBSR‡PRTDET ‰BSR‡CLR_DET*œCLEARTHEDETAILLINE‰LEA‡LISTDESC+2-PBA(A6),A1*œA1=ADDRMOVETO‰MOVE.L„#'SOUR',(A1)+‰MOVE.L„#'CEF',(A1)+‰MOVE.L„#'ILE',(A1)+‰MOVE.W„#':',(A1)++*œMOVE'SOURCEFILE:'TODESTINATIONADDR‰MOVE.L„(A7)+,A0&*œA0=ADDROFFILEDESCRIPTORTOEXPAND‰MOVE.L„A1,-(A7)*œA1=ADDRTOEXPANDINTO ‰BSR‡X71700*œEXPANDFILEDESCRIPTOR‰MOVE.L„(A7)+,A1*œA1=ADDRESSMOVETO‰MOVE.L„A0,-(A7)$*œA0=ADDRESSOFMODULECREATIONTIME ‰MOVE.L„A1,A0*œA0=ADDRESSMOVEFROM‰MOVE.L„#$4020001E,D0*œD0=SPECIFICCHTRREMOVALFLAG*ŸCHTRTOREMVOE=SPACE*ŸNBRCHTRSTOEXAMINE=30 ‰BSR‡X70800-*œREMOVEEMBEDDEDSPACESFROMFILEDESCRIPTOR ‰BSR‡PM_0600*œSPACEFILLBALANCEOFBUFFER ‰BSR.S…PRTDET*œOUTPUTSOURCEFILEDATA ‰BSR‡CLR_DET*œCLEARTHEDETAILLINE‰MOVE.L„(A7)+,A3*œA3=ADDRMODULECREATIONTIME‰LEA‡LISTDESC+2-PBA(A6),A0*œA0=ADDRMOVETO‰MOVE.L„#'CREA',(A0)+‰MOVE.L„#'TION',(A0)+‰MOVE.L„#'T/D',(A0)+‰MOVE.W„#':',(A0)+-*œMOVE'CREATIONT/D:'TODESTINATIONADDRESS ‰MOVE.B„#6,D4*œD4=LOOPCONTROLPM_0100:*œA0=ADDRMOVETO ‰MOVE.L„#2,D1*œD1=NUMBEROFCHTRSTOCONVERT ‰CLR.L…D0‰MOVE.B„(A3)+,D0*œD0=VALUETOCONVERT ‰BSR‡BINHEX*œCONVERTTOHEXASCII ‰TST.B…(A2)+ ‰MOVE.L„A2,A0"*œA0=ADDRESSNEXTLOCATIONMOVETO‰CMP.B…#'',-2(A0)‰BNE.S…PM_0110!*œJMPIFNOTLEADSPACECHARACTER‰MOVE.B„#'0',-2(A0)#*œREPLACELEADSPACEWITHLEADZEROPM_0110: ‰CMP.B…#4,D4‰BHI.S…PM_0300*œJMPIFLOOPCONTROL=5OR6‰BEQ.S…PM_0400*œJMPIFLOOPCONTROL=4 ‰CMP.B…#1,D4‰BNE.S…PM_0500*œJMPIFLOOPCONTROL=2OR3PM_0200: ‰SUB.B…#1,D4‰BNE.S…PM_0100*œRETURNTOLOOPIFMORE ‰BSR.S…PRTDET*œ*PRINTCREATIONTIME/DATE ‰RTS.RETURN*PRTDET:‰LEA‡LISTDATA(PC),A0!‰MOVE.L„A0,OUT3IOS-PBA+IOSSAD(A6)‰LEA‡LISTDESE(PC),A0!‰MOVE.L„A0,OUT3IOS-PBA+IOSEAD(A6)‰IOSCALLOUT3IOS(PC) ‰BNEIOERPRT ‰RTSŒ.RETURN*PRTTITL:‰LEA‡BUFFIN(PC),A0#*œA0=ADDRESSOF16BYTEWORKBUFFER ‰BSR‡X70000*œGETASCIISYSTEMTIME/DATE‰LEA‡LT_DATE(PC),A1*œA1=ADDRMOVETO ‰MOVE.L„#8,D0*œD0=NUMBERBYTESTOMVE ‰BSR‡X70800*œMOVECURRENTDATE‰LEA‡LT_TIME(PC),A1*œA1=ADDRMOVETO ‰MOVE.L„#8,D0*œD0=NUMBERBYTESTOMOVE ‰BSR‡X70800*œMOVECURRENTTIME‰LEA‡LISTTITL(PC),A0!‰MOVE.L„A0,OUT3IOS-PBA+IOSSAD(A6)‰LEA‡LISTTITE(PC),A0!‰MOVE.L„A0,OUT3IOS-PBA+IOSEAD(A6)‰IOSCALLOUT3IOS(PC) ‰BNEIOERPRT ‰RTS.RETURNPM_0300:‰MOVE.B„#':',(A0)+*œMOVETIMESEPARATOR‰BRA.S…PM_0200PM_0400:‰MOVE.B„#'',(A0)+‰MOVE.B„#'',(A0)+*œMOVETIME/DATESEPERATOR‰BRA.S…PM_0200PM_0500:‰MOVE.B„#'/',(A0)+*œMOVEDATESEPERATOR‰BRA.S…PM_0200PM_0600:‰LEA‡LISTDESE(PC),A0/*œA0=ENDINGADDRESSWHEREFILEDESCIRPTORISATPM_0700: ‰CMP.L…A0,A1‰BHI.S…PM_0800*œJMPIFLOOPCOMPLETE‰MOVE.B„#'',(A1)+*œSPACEFILLBALANCEOFBUFFER‰BRA.S…PM_0700*œRETURNTOMAINLOOPPM_0800:‰RTS‰PAGE*5****************************************************** *ˆROUTINETOREWINDLIBRARYFILE*5******************************************************REWINDL:‰MOVE.L„A6,-(A7) *œSAVEREG‰LEA‡PBA(PC),A6*œA6=PROGRAMBASEADDRESS ‰TST.BLIBPREV-PBA(A6)LIBEXIST‰BEQ.SREWINDEX*œJMPIFLIBRARYDOESNOTEXIST‰MOVE.W#IOREWD,LIBRIOS-PBA(A6))*œFORCECURRENTRECDPOINTERTOBESETAT*œBEGINNINGOFFILE+‰AND.W…#$FFFF-IOPPOS,LIBRIOS-PBA+IOSOPT(A6)1*œREMOVETHEPOSITIONBITSFROMTHEOPTIONSFIELD‰IOSCALLLIBRIOS(PC) ‰BNEIOERPRT‰MOVE.W#IOREAD,LIBRIOS-PBA(A6) REWINDEX:‰MOVE.L„(A7)+,A6 *œRESTOREREG ‰RTS.RETURN‰PAGE9**********************************************************#*ˆROUTINETOVERIFYTHEMODULENAME*ˆUSEDWITHCOMMANDLINEINPUT?*ˆUPONENTERINGTHISROUTINEA0MUSTPOINTATMODULENAMESTART*‰REGISTERSUSEDA0A2A3D0D1*ˆA0=STARTOFDATATOEXAMINE-*ˆA0POINTSTOCHARAFTERMODNAMEATEXITOR*ˆATTERMINATORCHARACTER*ˆA2=V  ERIFYTABLESTARYADDR$*ˆA3=ADDROFMODULENAMEHOLDAREA=*ˆD1=LENGTHOFMODULENAME(GOODAFTERROUTINEISCOMPLETE) *ˆD0=STATUS#*ˆD2=1MEANSPRINTERRORMSGMODM'*ˆIFVALIDTHEMODULENAMEISINMODNAM*9*********************************************************** MODVERBƒEQU*‰CLR.LD1ˆLENGTH‰LEAMODNAM(PC),A3‰MOVE.L#'„',(A3)‚INIT‰MOVE.L#'„',4(A3)‰MOVE.W#'‚',8(A3)‰LEAMODTAB(PC),A2ƒINIT ‰CLR.LD0MODLOPBƒMOVE.B(A0),D0)‰TST.B0(A2,D0)‚CKTABLEFORINVALIDCHAR‰BEQ.SMODERRB"‰CMP.B#1,0(A2,D0)‚VALCHARALWAYS‰BEQ.SMODGOODB‰TST.BD1ˆ1STTIME‰BEQ.SMODERRB†ERRIF1STTIME‰CMP.B#2,0(A2,D0)‚VAL2NDCHAR‰BEQ.SMODGOODB)‰CMP.B#'T',0(A2,D0)‚CKTABFORTERMCHAR‰BEQ.SMODENDB**ˆERRORCONDITIONMODERRBƒTST.BD2…PRINTFLAGSET‰BEQ.SMODERR1B„NO ‰BSRPRTMODMMODERR1B‚EQU*‰MOVE.L#-1,D0‰BRA.SMODEXITB*%MODGOODB‚MOVE.B(A0)+,(A3)+‚SAVECHAR‰ADD.B#1,D1…ADDFORSIZE‰CMP.B#10,D1…BEYONDEND‰BHIMODERRB†YES‰BRAMODLOPB†CONTINUEMODENDBƒCLR.LD0‰MOVE.LA0,HOLDLOCM-PBA(A6)MODEXITB‚RTS.RETURN‰PAGE<*************************************************************<*ˆTHISROUTINEVERIFIESTHEMODNAMINTHMODULE-SIZEIS108*ˆONCEASPACEISENCOUNTERALLREMAININGMUSTBESPACES!*ˆA0POINTATAREATOBEVERIFIED&*ˆD0=0ATEXITMEANSVERIFYWASGOOD*ˆREGUSEDA0A2D0D1D3D4D59*ˆREGD3D4D5WILLCONTAINTHEMODULENAME(1ST4IND3,*ˆNEXT4IND4ANDLAST2IND5*<************************************************************* MODVER„EQU*1‰MOVEM.L(A0),D3-D5‚SAVEMODULENAMEINREGISTERS+‰LEAMODTAB(PC),A2ƒINITTABLEOFVALIDCHAR‰MOVE.L#9,D0„INITREG ‰CLR.LD1‰MOVE.B(A0)+,D1‚GETBYTE(‰CMP.B#1,0(A2,D1)‚ISITOKFOR1STCHAR‰BNE.SMODEXIT…NO$MODLOPƒMOVE.B(A0)+,D1‚GETNEXTCHAR‰CMP.B#SPACE,D1‚ISITASPACE‰BEQ.SMODSP…GOTOSPACEPROC$‰CMP.B#'T',0(A2,D1)‚TERMINATORCHAR‰BEQ.SMODEXITƒYES%‰TST.B0(A2,D1)‚ISITANINVALIDCHAR‰BEQ.SMODEXITƒYES ‰SUB#1,D0‰BEQ.SMODEXIT‚DONE‰BRAMODLOP†CONTINUE*MODSP„SUB.W#1,D0…RESETDO‰BEQ.SMODEXIT‰CMP.B#SPACE,(A0)+‰BEQMODSP‡CONTINUEMODEXIT‚RTS.RETURN*‰PAGE****ˆTHECODEONTHISPAGEWASNOTREFERENCED*ˆSOITHASBEENCOMMENTEDOUT&*ˆBUTRETAINEDFORHISTORICALPURPOSES*ˆWELLITSOUNDSGOODANYWAY*:***********************************************************8*ˆROUTINETOPRINTMSGBADMODULE&SHOWNAME&SECTOR#-*ˆREGD3D4&D5MUSTCONTAINTHEMODULENAME*:************************************************************ERRORMOD EQU **ˆMOVEM.LD3-D5,BADNAM*ˆMOVE.W#'‚',BADNAM+10*ˆMOVE.L#4,D1*ˆLEABADSEC,A0*ˆMOVE.LD6,D0„SECTORCOUNT*ˆBSRBINHEX†CONVTOASCII'*ˆMOVE.LA5,-(A7)‚SAVEPOINTERONSTACK *ˆBSRERMODPM*ˆLEACONTM,A3*ˆLEACONTME,A4*ˆBSRPRTIFORM*ˆIOSCALLDNRIOS *ˆBNEIOERPRT*ˆCMP.B#'Y',DNRR*ˆBNEGOBACK†EXITPROGRAM*ˆMOVE.L(A7)+,A5‚RESETPOINTER*ˆRTS.RETURN‰PAGE-**********************************************0*ˆREPLACEMODULEROUTINE-WILLREPLACEAMODULE)*ˆINTHELIBRARYWITHTHEMODULEFOUNDIN+*ˆTHESOURCEFILETHEMODULEBEINGREPLACED+*ˆMUSTALREADYEXIST&THEMODULEDOINGTHE3*ˆREPLACINGMUSTNOTEXISTINLIBUNLESSITHASTHE*ˆSAMENAMEASTHELIBMODULE*6******************************************************* DOREP„EQU*(‰TST.BLIBPREV-PBA(A6)ƒDIDOLDLIBEXIST‰BNE.SDOREP1„YES ‰BSRNOLIB‰BRADOREPEX…EXIT*'DOREP1ƒBTST#0,D0†ANYTHINGINCOMMLINE‰BEQ.SDOREP2„YES DOREPER1:‰LEA‡PBA(PC),A6*œA6=PROGRAMBASEADDRESS‰BSRINVALER…PRTERRORMSG‰BRADOREPEND…EXIT*#1‚THEN.S10/24/83‰BSR‡ASSGNTMP 10/24/83‰ENDI®10/24/83 *º10/24/83 *º10/24/83/*œ(PUTENTRYINDIRECTORYANDOPENFORUSE-LU2)‰RTS.RETURNFROMROUTINE‰PAGE1**************************************************-*ˆSUBROUTINETOINITPARMWITHDEFAULTVALUES*1**************************************************INITDSK:‰MOVE.L„A0,-(A7) *œSAVEREG‰LEA‡PBA(PC),A0*œA0=PROGRAMBASEADDRESS-‰MOVE.LVOLNAM-PBA(A0),FHSVOL(A6)‚VOLUMENAME4‰MOVE.WUSERNUM-PBA(A0),FHSUSN(A6)‚USELOGONUSER#+‰MOVE.LCATNAM-PBA(A0),FHSCLG(A6)‚CATALOGUE%‰MOVE.LCATNAM+4-PBA(A0),FHSCLG+4(A6)'‰MOVE.L#'„',FHSFIL(A6)‚BLANKFILENAME‰MOVE.L#'„',FHSFIL+4(A6)-‰MOVE.W#'RO',FHSEXT(A6)‚BLANKEXTENSIONNAME‰MOVE.L„(A7)+,A0 *œRESTOREREG ‰RTS.RETURN*-**********************************************.*ˆROUTINETOASSIGNLOGICALUNIT3TOTERMINAL+*ˆBYSETTINGITUPTHESAMEASLU6WHICHIS"*ˆALREADYASSIGNEDTOTHETERMINAL*.*********************************************** SETLU3ƒEQU*‰LEALU3AFHS(PC),A0ƒINITADDR ‰FHSCALL(A0)*ˆRETURNFROMFHSCALL‰BNEIOERPRT†BADRETURN ‰RTSŒ.RETURN‰PAGE:***********************************************************;*ˆROUTINETODIRECTOUTPUTTOSOMETHINGOTHERTHANTERMINAL*:***********************************************************NEWOUT:‰BSETW…#1,LIB_FLG1-PBA(A6)#*œSETFLAG-OUTPUTFIELDSPECIFIED‰MOVEM.LƒA3/A6,-(A7) *œSAVEREG ‰MOVE.L„A6,A3*œA3=PROGRAMBASEADDRESS,‰LEALU3FHS(PC),A6ƒLU3PARMTABLEADDRTOA6@‰MOVE.B#0,FHSWCD(A6)LOADWRITEPASSWORD(USERCANALWAYSWRITE?‰MOVE.B#$FF,FHSRCD(A6)‚LOADREADPASSWORD(ONLYUSERCANREAD)3‰MOVE.WUSERNUM-PBA(A3),FHSUSN(A6)‚DEFAULTUSERNUM-‰MOVE.LVOLNAM-PBA(A3),FHSVOL(A6)‚VOLUMENAME*‰MOVE.LCATNAM-PBA(A3),FHSCLG(A6)‚CATNAME)‰MOVE.LCATNAM+4-PBA(A3),FHSCLG+4(A6)‚CAT*‰MOVE.W#'LS',FHSEXT(A6)‡LSISDEFAULTEXT7‰MOVE.LSAVOADD-PBA(A3),A0‡OFLAGHADADDROFSCANSTART*)******************************************&*ˆSETUPA0WITHADDROFSTARTOFSCAN'*ˆSETUPA6WITHADDROFFHSPARMBLOCK*‰CALLEDITFILEROUTINE****)****************************************** ‰BSREDITFILE‰TST.LD0ŠCKFORERR0R ‰BMIINVALERR‰CMP.B…#COMMA,D1 ‰BEQ‡INVALERR**œJMPIFNEXTCOMMANDLINECHARACTER=',',*œTHEIMPLICATIONBEINGTHATAFILE  HASBEEN*œSPECIFIEDFORTHELISTFIELD‰BTST#1,D0†CKFORDEVICEFLAG‰BNE.SLU3ASS†YES‰TST.BD0ˆCKFORFAMILY%‰BNEINVALERRˆFOUNDFAMILYINDICATION ‰BRA.SNOTDEV)******************************************'*ˆ****ƒASSSIGNLOGICALUNIT3(LISTING)*'****************************************LU3ASS: ‰BTSTW…#14,D0‰BEQ.S…LU3ASSC*œJMPIF*¦DEVICESPECIFIED*¦VOLUMEFIELDCONTAINSDATA*œFALLTHRU-->*¦DEVICESPECIFIED*¦VOLUMEFIELDISNULL‰MOVEM.Lƒ(A7)+,A6/A3*œRESTOREREGISTERS ‰BRA‡SETLU3*œSETLU3SAMEASLU6LU3ASSC:-‰MOVE.W#FHASGN,FHSCMD(A6)‚SETASSIGNCOMMAND4‰MOVE.W#FOPPW,FHSOPT(A6)‚SETEXCLUSIVEWRITEOPTION ‰FHSCALL(A6)!*ˆ*****ƒRETURNFROMFHSCALL‚****‰BNEIOERPRTˆERR0RNEWOUTE:‰MOVEM.L„(A7)+,A6/A3 *œRESTOREREG‰RTSŒ.RETURNFROMROUTINE***)******************************************"*ˆ**‚OUTPUTISAFILENOTADEVICE.*ˆ**‚A6CONTAINSADDROFOUTPUTFHSPARMBLOCK*)****************************************** NOTDEVƒEQU**3‰MOVE.W#FHALLO+FHASGN,FHSCMD(A6)‚SETALLOC&ASSIGN*6*******************************************************Š***‚OPTIONSSET5******************************************************'‰MOVE.W#FOPPW+FOPEND+FOPSEQ,FHSOPT(A6)+‰CLR.WFHSLRL(A6)‚SETLOGICRECLENGTHTO0"‰CLR.LFHSSIZ(A6)‚SIZECODE=ZERO*"NOTDEV1‚FHSCALL(A6)‡MAKEFHSCALL‰BEQNEWOUTE‰GOOD‰CMP.B#5,D0‰DUPFILE‰BNE‡IOERPRTˆERR0R‰MOVE.W#FHASGN,(A6) ‰BRANOTDEV1*NV_DEV:‰MOVE.L„#EM_NVDEV,D0)*œD0=KEYVALUEFORINVALIDDEVICEMESSAGE ‰BRA‡IOERPRT‰PAGE8**********************************************************ˆ****ƒOPTIONSROUTINECALL‚***4*ˆTHISROUTINEWILLCKINPUTTODETERMINEIFOPTIONS+*ˆHAVEBEENREQUESTED.OPTIONFLAGSARESET!*ˆA2=ADDRSTARTOFOPTIONFIELD*INCOMMANDLINE*?****************************************************************CKFOROPT‚EQU*‰CMP.L#0,A2ˆANYOPTIONS‰BEQ.SENDOPT†NO*OPTOPTƒBSROPTION*"***********************************@*‰**BIT6IND0SETMEANSTHECARRAGERETURNISTHENEXTCHAR**"***********************************#‰BTST#6,D0†CKFORCARRRETURNFLAG‰BNE.SENDOPT†EXITWASCARRRET‰TST.BD0ˆCKFORERR0RBITSSET*‰BNEƒINVALERRˆFOUNDINVALIDFLAGCONDITION*+********************************************1*‰***CKFORN(DONOTBUILDDIRECTORY)OPTION***,**********************************************‰CMP.B#'N',D1ƒISDONOTBUILDDIROPTSET‰BNE.SOPTER„NO(‰MOVE.B#1,DIROPT-PBA(A6)‚SETNODIROPT‰BRAOPTOPT†GETNEXT OPTER„EQU*‰MOVE.L„#EM_NVO,D0)*œD0=KEYVALUEFORINVALIDOPTIONMESSAGE‰BRA.S…IOERPRT*ENDOPTƒRTS.‹RETURNFROMROUT‰PAGE********************************************ˆPRINTMSGWITHOUTFORMAT********************************************PRTIFORM EQU *"‰MOVE.LA3,OUT6IIOS-PBA+IOSSAD(A6)"‰MOVE.LA4,OUT6IIOS-PBA+IOSEAD(A6)‰IOSCALLOUT6IIOS(PC)‰BNE.SIOERPRT ‰RTSˆ.RETURN*-**********************************************ˆINVALIDMSGSUBROUTINE+******************************************* INV_NTRY:‰MOVE.L„#'ENTR',INV_XX-PBA(A6)‰MOVE.W„#'Y',INV_XX+4-PBA(A6)*œSET'ENTRY'INMESSAGEINVALER‚LEAINVMSG(PC),A3‰LEAINVMSGE(PC),A4 ‰BSR‡MSGPRT‰MOVE.L„#'CMD',INV_XX-PBA(A6)‰MOVE.W„#'‚',INV_XX+4-PBA(A6)*œRESTORE'CMDƒ'TOMESSAGE INVM_CFC:‰MOVE.L„REGD7-PBA(A6),D0 ‰BTST.L„#0,D0‰BNE.S…INVM_XIT"*œJMPIFNOTCHAINFILEPROCESSING‰MOVE.W„#$C000,TERM_FLG-PBA(A6)2*œFORCETERMINATIONFLAGTOERRORTYPETERMINATION‰BRA.S…TERMINATE INVM_XIT:‰RTS*-**********************************************ˆPRTBRIEFPROGDESCRIPTION-*********************************************QUESTION LEA QUESTM(PC),A3‰LEAQUESTME(PC),A4‰BSR.SPRTIFORM‰RTS*7*******************************************************+*ˆPRT'SOURCEHASMORETHANONEMODULEMSG'7*******************************************************PRTMSMƒLEAMSM(PC),A3‰LEAMSME(PC),A4 ‰BSR.SMSGPRT ‰RTS.RETURN  *3****************************************************ˆPRINTMSG‚INVALIDMODULENAME3*************************************************** PRTMODM‚EQU*‰LEAMODM(PC),A3‰LEAMODME(PC),A4 ‰BSR.SMSGPRT‰BRA.S…INVM_CFC*œEDITFORCHAINFILEMODE‰PAGE*.***********************************************&*ˆ**‚ROUTINETOPRINTERR0RMESSAGE‚***,********************************************* INVALERR:‰MOVE.L„#EM_NVE,D0(*œD0=KEYVALUEFORINVALIDENTRYMESSAGEIOERPRT: ‰BSR‡X10000*œISSUECALLTOERRORMSGPRGM**2*ˆALLUTILITIESWILLTERMINATEBYCALLINGƒERQ.TERM:*ˆHOWEVER-ANINDICATIONASTOWHETHERTHEREWASANERROR5*ˆWHICHMIGHTCAUSECHAINPROCESSINGTOABORTMUSTBE9*ˆSPECIFIEDATTHETIMEOFTHETERMINATION.THEFOLLOWING8*ˆWILLDEFINETHETYPEOFTERMINATIONTHATARECURRENTLY *ˆPOSSIBLE:*8*’NORMALTERMINATION‚-IMPLIESTHATUTILITYSUCCESSFULLY *¨COMPLETED**œEITHER„ERQ.TERM*œORˆERQ.TERM#0,#0**:*’ERRORTERMINATIONƒ-IMPLIESTHATUTILITYTERMINATEDWITH *¨ANERROR**¦ERQ.TERM#0,#$C000*<*’WARNINGTERMINATION-IMPLIESTHATUTILITYTERMINATEDWITH*¨AWARNING(ie.ASSEMBLY)**¦ERQ.TERM#0,#$1000*L********PBA-ISTHEPROGRAMBASEADDRESS‚--THISMAYBEANYSYMBOLTHEUSER *®WOULDLIKE-PBAHASBEENUSED*®HERE**** TERMINAT:‰LEA‡PBA(PC),A6‰ERQ.TERM‚#0,TERM_FLG-PBA(A6) TERM_FLG:‰DC.W†0‰TERMINATIONFLAG0*œWILLCONTAINTHEAPPROPRIATETERMINATIONVALUE *œFOR‡GOOD†#0*¦ERROR…#$C000*¦WARNINGƒ#$1000*‰PAGE***’ERRORMESSAGECALLINGROUTINE**ˆCALL†BSR‡C_EM_PGM**ˆINPUT!*’D0=ASRETURNEDFROMTRAPCALL,*’D1=USERLOGICALUNITNUMBERTOOUTPUTTO!*’A0=ASRETURNEDFROMTRAPCALL**ˆOUTPUT*’NOREGISTERPRESERVATION* EM_XCEPT:‰DC.W†$0000…TABLETERMINATOR2*œTHISTABLEISUSEDTODEFINEEXCEPTIONSTOERROR.*œMESSAGESTHATSHOULDNOTCAUSEATERMINATION*œVIATHEERRORCONDITION* C_EM_PGM:‰LEA‡PBA(PC),A6*œA6=PROGRAMBASEADDRESS‰MOVEM.LƒD0/A0,EM_PBLK-PBA(A6)+*œSAVED0ANDA0INERRORMSGPARAMETERBLK‰AND.L…#$00FF,D0*œISOLATEERRORSTATUSRETURN‰LEA‡EM_XCEPT(PC),A00*œA0=ADDROFTBLCONTAININGERRORMSGCODESTHAT-*ŸWILLNOTBECONSIDEREDASERRORTERMINATION *ŸCONDITIONS CEMP0100: ‰TST.W…(A0)‰BEQ.S…CEMP0200 *œJMPIFTABLEHASBEENEXAMINED‰CMP.W…(A0)+,D0‰BEQ.S…CEMP0300'*œJMPIFERRORCODERETURNISONEWHICH/*œWILLRESULTINBEINGANEXCEPTION-THISCASE**œWILLNOTBECONSIDEREDFORANERRORTYPE *œTERMINATION‰BRA.S…CEMP0100 *œREPEATLOOP CEMP0200:‰MOVE.W„#$C000,TERM_FLG-PBA(A6),*œSETFLAGTOTERMINATEWITHERRORCONDITION CEMP0300:‰LEA‡EM_PBLK(PC),A0&*œA0=ADDRUSERERRORMSGPARAMETERBLK‰MOVE.B„D1,EM_TLUN-EM_PBLK(A0)*œSETTHEUSERLUNTOOUTPUTTO ‰MOVE.L„#2,D0*œERRORMSGPRGMINPUTRQMNT‰TRAP†#4$*œISSUEREQUESTTOERRORMSGHANDLER ‰BSR‡INVM_CFC *œEDITFORCHAINFILEPROCESSING‰RTS‰PAGE)******************************************ˆPRINTMSGWITHFORMAT(***************************************** MSGPRTƒEQU*!‰MOVE.LA3,OUT6IOS-PBA+IOSSAD(A6)!‰MOVE.LA4,OUT6IOS-PBA+IOSEAD(A6)‰IOSCALLOUT6IOS(PC) ‰BNE‡IOERPRT*œJMPIFI/OERROR ‰RTS.RETURN*.***********************************************ˆPRTMSG‚NOMODULEIDRECORDS.***********************************************NOID:‰BTSTW…#0,LIB_FLG1-PBA(A6)‰BNE.S…NOID_XIT*œJMPIFMSGALREADYDISPLAYED‰LEANOIDM(PC),A3‰LEANOIDME(PC),A4 ‰BSRMSGPRT NOID_XIT:‰RTS*.**********************************************#*ˆPRINTMSGERRORCHECKFORTEMPLIB.**********************************************TEMPERƒLEATEMPM(PC),A3‰LEATEMPME(PC),A4 ‰BSRMSGPRT ‰BRA‡INVM_CFC*œEDITFORCHAINFILEMODE*.********************************************** *ˆPRTWARNINGDIRECTORYFULLMSG.**********************************************LIBFULRT EQU *‰LEALIBFULM(PC),A3‰LEALIBFULME(PC),A4 ‰BSRMSGPRT ‰BRA‡INVM_CFC  *œEDITFORCHAINFILEMODE*-********************************************* *ˆPRTLIBRARYDOESNOTEXISTMSG-**********************************************NOLIB„LEANOLIBM(PC),A3‰LEANOLIBME(PC),A4‰BTSTW…#1,LIB_FLG1-PBA(A6)‰BNE.S…NOLIB10*œJMPIFOUTPUTFIELDSPECIFIED ‰BSRMSGPRT ‰BRA‡INVM_CFC*œEDITFORCHAINFILEMODENOLIB10:!‰MOVE.L„A3,OUT3IOS-PBA+IOSSAD(A6)!‰MOVE.L„A4,OUT3IOS-PBA+IOSEAD(A6)*œSETSTART/ENDADDRESSES‰IOSCALLƒOUT3IOS(PC) ‰BNE‡IOERPRT*œJMPIFI/OERROR ‰BRA‡INVM_CFC*œEDITFORCHAINFILEMODE**1*************************************************!*ˆPRINTMESSAGEMODULEISMISSING1*************************************************MODMISƒLEAMODMISM(PC),A3‰LEAMODMISME(PC),A4 ‰BSRMSGPRT ‰BRA‡INVM_CFC*œEDITFORCHAINFILEMODE*5******************************************************-**********************************************ˆPRINTMSGNOMODULEFOUNDNOMODFND EQU *‰LEAMODMSG(PC),A4 ‰BSRMOVMOD‰LEAMODMSG(PC),A3‰LEANOMODME(PC),A4 ‰BSRMSGPRT ‰BRA‡INVM_CFC*œEDITFORCHAINFILEMODE*-*********************************************)*ˆPRINTINSERTAFTERMODULENOTFOUNDMSG-********************************************** INSRT„EQU*‰LEAINSM+20-PBA(A6),A4 ‰BSRMOVMOD‰LEAINSM(PC),A3‰LEAINSME(PC),A4 ‰BSRMSGPRT ‰BRA‡INVM_CFC*œEDITFORCHAINFILEMODE**0************************************************+*ˆPRINTERRMSG‚-SOURCEALREADYINLIBRARY0************************************************ MODER1ƒEQU*‰LEAMODALMI(PC),A4 ‰BSRMOVMOD‰LEAMODALM(PC),A3‰LEAMODALME(PC),A4 ‰BSRMSGPRT ‰BRA‡INVM_CFC*œEDITFORCHAINFILEMODE‰PAGEX10000:‰MOVE.L„#LDFLUN,D1'*œD1=USERLOGICALUNITNBRTOOUTPUTTO ‰BSR‡C_EM_PGM*œISSUECLLTOERRORMSGPRGM‰RTS*‰PAGE** *ˆRTNETO,*’DETERMINEIFINPUTFILESPECIFIEDISVALID(*’(VALID-->BINARYNON-CONTIGIOUSFILE)**ˆINPUT"*’A0=ADDROFFHSPARAMETERBLOCK**ˆOUTPUT*’STATUS$*œNOTEQUAL-->INPUTFILETYPE'OK'!* EQUAL-->INPUTFILETYPEERROR* *ˆREGSTATUS*’NOREGISTERALTERATION**X20000:‰CMP.W…#256,FHSLRL(A0) ‰BNE.S…X20100*œJMPIFNOTBINARYTYPEFILE*œTHISISANERROR‰MOVE.W„FHSOPT(A0),D0*œD0=OPTIONFIELDCONTENTS‰AND.L…#FFTBIT,D0*œD0=INPUTFILETYPE ‰BNE.S…X20200*œJMPIFVALIDFILETYPE*œBINARYNON-CONTIGIOUSX20100:!‰MOVE.L„FHSFIL(A0),X00100-PBA(A6)%‰MOVE.L„FHSFIL+4(A0),X00100+4-PBA(A6)*œSETFILENKAMEINMESSAGE‰MOVEM.LƒA0-A6,-(A7) *œSAVEREG‰LEA‡X00100(PC),A3‰LEA‡X00199(PC),A4*œA3=MSGSTARTADDR*œA4=MSGENDƒADDR ‰BSR‡MSGPRT*œDISPLAYINVALIDFILETYPEMSG‰MOVEM.Lƒ(A7)+,A0-A6 *œRESTOREREG ‰CLR.L…D0*œFORCERETURNERRORSTATUSX20200:‰RTS*‰PAGE** *ˆRTNETO*’EDITFORNULLDIRECTORY**ˆINPUT *’A6=PBA**ˆOUTPUT/*’NULLDIRECTORY-->FORCEDIRECTORYEXISTFLAG*¥ELSENOCHANGE**ˆREGISTERALTERATION**’D0=DESTROYED*X30000:‰MOVE.L„DIRLOC-PBA(A6),D0‰CMP.L…DIREND-PBA(A6),D0 ‰BNE.S…X30100*œJMPIFNOTANULLDIRECTORY‰MOVE.B„#1,DIREXIST-PBA(A6)*œFORCEDIRECTORYEXISTFLAGONX30100:‰RTS‰PAGE.***********************************************%*ˆCONVERTBINARYTOHEXASCIIROUTINE*(*ˆRIGHTJUSTIFY&BLANKFILLONTHELEFT,*ˆTHELEASTSIGNIFICANTDIGITISNOTBLANKED* *ˆD0=HEXVALUETOBECONVERTED *ˆD1=LENGTHOFRECEIVINGFIELD7*ˆA0=ADDRESSOFLEFTMOSTPOSITIONOFRECEIVINGFIELD*.**********************************************(BINASCƒDC.B'0123456789ABCDEF'…HEXTABLE* BINHEXƒEQU*‰LEABINASC(PC),A1ƒINITADDR‰LEA0(A0,D1),A2‚ENDLOCATION*BINLOPƒMOVE.BD0,D3„GETBYTE%‰ASR.L#4,D0†SHIFTOFFLASTHEXVALUE!‰AND.L#$F,D3„MASKOFFOTHERBITS2‰MOVE.B0(A1,D3),-(A2)‚MOVEFROMTABLETORECAREA‰CMP.LA2,A0…AREWEDONE‰BLTBINLOP†NO*‰CMP.W#1,D1…ONLY1CHAR‰BEQ.SBINOUT„YES**ˆDOZEROSUPPRESSION*‰LEA0(A0,D1),A2‚INITENDLOC‰SUB.L#1,A2…FIXENDLOC!BINSP„CMP.B#'0',(A0)‚AS CIIZERO?‰BNE.SBINOUT†NOGETOUT%‰MOVE.B#'',(A0)+‚REPLACEWITHBLANK‰CMP.LA0,A2…AREWEDONE ‰BGTBINSP‡NO**BINOUTƒRTS.RETURN*‰PAGE-*********************************************+*‚32BITBINARYTODECIMALASCIISUBROUTINE-**********************************************,*‚CONVERTSBINARYIND0ANDPUTSASCIIDIGIT(*…CHARACTERSATADDRESSSPECIFIEDINA0.(*…LEADINGZEROSARECONVERTEDTOSPACES.+*…THEFIELDLENGTH(NO.CHARS)ISSPECIFIED *…IND1INTHECALLINGSEQUENCE.**‚CALLINGSEQUENCE:!*…MOVE.L,D0*…MOVE.L,D11*…MOVE.L,A0*…BSRBINDECFJ* *‚RETURNS:*…D0=0=>GOODCONVERSION**‚REGSUSED:‚01234567 *ŠDƒ****ŠAƒ****7TENSƒDC.L10000000,1000000,100000,10000,1000,100,10,1,0**$BINDECFJ MOVE.L #8,D2 MAX NO. DIGITS SUB.L D1,D2 NO. DIGITS TO SKIP! BMI.S BINDECF5 BRANCH ERROR EXIT LSL.L #2,D2 DOUBLE WORD LENGTH LEA TENS(PC),A1 START OF TABLE" ADD.L D2,A1 ADJUST FOR DIFFERENCE&MOVE.W#'‚',D2INITIALIZEACCUMULATOR%BINDECF1 SUB.L (A1),D0 SUBTRACT 10**N BCS.S BINDECF2 BRANCH TOO BIG* ADD.W #1,D2 INCREMENT CURRENT DIGIT COUNT BRA BINDECF1 CONTINUE)BINDECF2 ADD.L (A1)+,D0 RESTORE, ADV PNTR TST.L (A1) TEST DONE BEQ.S BINDECF4 BRANCH DONE CMP.W#'‚',D2LEADINGZEROTEST! BEQ.S BINDECF3 BRANCH STILL ZERO# ADD.B #$10,D2 BRING TO ASCII DIGIT%BINDECF3 MOVE.B D2,(A0)+ DEPOSIT CHAR‚LSL#8,D2‚SAVECHARDEPOSITED#‚MOVE.B#$20,D2‚RESTORELSTOSPACE‚BRABINDECF1„CONTINUE4BINDECF4ADD.B#$10,D2„LASTONEBECOMESDIGITALWAYS‚MOVE.BD2,(A0)+ƒDEPLASTCHAR‚TST.LD0…SETCONDITIONCODE BINDECF5 RTS*‰PAGEO******************************************************************************** *ˆROUTINETO3*’CONVERTTHESYSTEMTIMEANDDATETODECIMALASCII**ˆCALL†BSR‡X70000**ˆINPUT'*’A0=ADDRESSOFA16BYTEWORKBUFFER**ˆOUTPUT*’A0=UNALTERED4*’FIRST‚8BYTESOFWORKBUFFERCONTAINDATEƒMM/DD/YY5*’SECOND8BYTESOFWORKBUFFERCONTAINTIMEƒHH:MM:SS**ˆREGISTERSDESTROYED *’D0D1D2D3*O*********************************************************************************ˆCONVERTDATEANDSAVE*O*******************************************************************************X70000:‰MOVEM.LƒA0-A2,-(A7) ‰MOVE.L„A0,A2*œA2=A0=ADDRESSOFWORKBUFFER‰MOVE.L„#GTDTIM,D0**œD0=DIRECTIVETOGETSYSTEMTIMEANDDATE‰TRAP†#1*œOBTAINTIME/DATEFROMSYSTEM‰MOVE.L„(A0),D0!*œD0=ORDINALDATETOBECONVERTED‰MOVE.L„4(A0),12(A0)*œ12(A0)=TIMETOBECONVERTED ‰BSR‡DATEOJ *œCONVERTBINARYORDINALDATETO*¤BINARYGREGORIANDATE‰MOVE.L„D0,08(A0)%*œD0=BINARYGREGORIANDATE(YYYYMMDD) ‰ASR.W…#8,D0*œD0=MONTHINLOWORDERBYTE‰AND.L…#$FF,D0*œD0=MONTHISOLATED ‰MOVE.L„#2,D1%*œD1=NUMBEROFDIGITSTOBECONVERTED *œA0=ADDRESSTOSTORECONVERSION ‰BSR‡BINDECFJ$*œCONVERTMONTHTOASCIIANDSAVEIT‰MOVE.B„#'/',(A0)+(*œMOVESEPARATAOR'/'TODATECONVERSION‰MOVE.B„11(A2),D0‰AND.L…#$FF,D0*œD0=DAYISOLATED%*œD1=NUMBEROFDIGITSTOBECONVERTED *œA0=ADDRESSTOSTORECONVERSION ‰BSR‡BINDECFJ"*œCONVERTDAYTOASCIIANDSAVEIT‰MOVE.B„#'/',(A0)+'*œMOVESEPARATOR'/'TODATECONVERSION‰MOVE.W„08(A2),D0‰AND.L…#$FFFF,D0*œD0=YEARISOLATED%*œD1=NUMBEROFDIGITSTOBECONVERTED *œA0=ADDRESSTOSTORECONVERSION ‰BSR„BINDEC *œCONVERTYEART04ASCIIDIGITS‰MOVE.B„-(A0),-2(A0)‰MOVE.B„-(A0),-2(A0)/*œMOVE2DIGITSOFYEARTOAPPROPRIATEPOSITIONO*********************************************************************************ˆCONVERTTIMEOFDAYANDSAVE*O*******************************************************************************‰MOVE.L„4(A0),D1)*œD1=TIMEINMILLISECONDSTOBECONVERTED%*œA0=ADDRESSTOSTORETIMECONVERSION ‰CLR.L…D0*œD0=HOURCOUNTERTL1†SUB.L…#1000*60*60,D1 ‰BCS.S…TL2 ‰ADD.L…#1,D0 ‰BRA.S…TL1TL2†ADD.L…#1000*60*60,D1*œADJUSTFORLASTSUBTRACTION ‰MOVE.L„D1,D3 3*œD3=NUMBEROFMILLISECONDSFORMINUTESANDSECONDS ‰MOVE.L„#2,D1&*œD0=NUMBEROFBINARYHOURS‚TOCONVERT *œD1=NUMBEROFDIGITSTOCONVERT *œA0=ADDRESSTOSTORECONVERSION ‰BSR‡BINDECFJ"*œCONVERTNUMBEROFHOURSANDSAVE‰MOVE.B„#':',(A0)+'*œMOVESEPARATOR':'TOTIMECONVERSION‰DIVU†#60*1000,D3 ‰CLR.L…D0 ‰MOVE.W„D3,D0(*œD0=NUMBEROFBINARYMINUTESTOCONVERT *œD1=NUMBEROFDIGITSTOCONVERT*œA0=ADDRESSSTORECONVERSION ‰BSR†BINDECFJ$*œCONVERTNUMBEROFMINUTESANDSAVE‰CMP.B…#'',-2(A0) ‰BNE.S…X701004*œJMPIFLEADDIGITOFMINUTESNOTASPACECHARACTER‰MOVE.B„#'0',-2(A0)*œREPLACESPACEWITHASCIIZEROX70100:‰MOVE.B„#':',(A0)+#*œMOVESEPARATORTOTIMECONVERSION ‰CLR.W…D3‰SWAP†D3‰DIVU†#1000,D3 ‰MOVE.W„D3,D0(*œD0=NUMBEROFBINARYSECONDSTOCONVERT *œD1=NUMBEROFDIGITSTOCONVERT*œA0=ADDRESSSTORECONVERSION ‰BSR‡BINDECFJ*œCONVERTSECONDSANDSAVE‰CMP.B…#'',-2(A0) ‰BNE.S…X702004*œJMPIFLEADDIGITOFSECONDSNOTASPACECHARACTER‰MOVE.B„#'0',-2(A0)*œREPLACESPACEWITHASCIIZEROX70200:‰MOVEM.Lƒ(A7)+,A0-A2*œRESTOREREGISTERS‰RTS‰PAGEO******************************************************************************** *ˆROUTINETO%*’CHARACTERFILLASPECIFIEDLOCATION*A***************„THISROUTINECANBECALLEDINONOFTHEFOLLOWING *’METHODS*-*’METHOD1-STARTADDRESSFORCHARACTERFILL *FILLCOUNT*1*’METHOD2=START/ENDADDRESSFORCHARACTERFILL**ˆCALL†BSR‡X70300**ˆINPUT*<*****************‚METHOD1‚A0=ADDRESSSTARTCHARACTERFILL*œD0=BITS‚0-15-->FILLCOUNT*¡BITS16-23-->FILLCHARACTER*$*’EXAMPLEˆ0041‚<-----ƒFILLCHARACTER*¡0020‚<-----ƒFILLCOUNT****<*****************‚METHOD2‚A0=ADDRESSSTARTCHARACTERFILL$*œD0=BITS16-23-->FILLCHARACTER*¡BITS31„-->METHOD2SELECTED.*œA1=ADDRESSLASTLOCATIONTOCHARACTERFILL*$*’EXAMPLEˆ8041‚<-----ƒFILLCHARACTER*¡0000‚<-----ƒNOTUSED****ˆOUTPUT*’A0=A0+FILLCOUNT*’A1=SAMEASINPUT.*’SPECIFIEDLOCATIONHASBEENCHARACTERFILLED***ˆREGISTERSALTERED*’D0D1*O*******************************************************************************X70300:‰BTST.L„#31,D0 ‰BEQ.S…X70400*œJMPIFMETHOD1SPECIFIED ‰MOVE.L„A1,D1 ‰SUB.L…A0,D1&*œD1=NUMBEROFBYTESTOCHARACTERFILL ‰BRA.S…X70500 *œCONTINUEX70400: ‰CLR.L…D1 ‰MOVE.W„D0,D1&*œD1=NUMBEROFBYTESTOCHARACTERFILLX70500:‰SWAP†D0*œD0.B=FILLCHARACTER ‰TST.L…D1 ‰BRA.S…X70700*œESTABLISHD1STATUS*œENTERTOMOVELOOPX70600:‰MOVE.B„D0,(A0)+ ‰SUB.W…#1,D1X70700: ‰BNE.S…X70600*œMOVEFILLCHARACTER*œJMPIFLOOPINCOMPLETE‰RTS‰PAGEO******************************************************************************** *ˆROUTINETO(*’MOVEDATAFROMONELOCATIONTOANOTHER*œWITHOPTIONFOR*¦SPECIFIEDCHARACTERREMOVAL*7*’THEUSERMAYCALLTHEROUTINEINONEOFTHEFOLLOWING *’METHODS:*œ1.STARTADDRESSMOVEFROM*ŸSTARTADDRESSMOVETO*ŸNUMBEROFBYTESTOMOVE* *œ2.START/ENDADDRESSMOVEFROM*ŸSTARTADDRESSMOVETO****ˆCALL†BSR‡X70800**ˆINPUT!*’METHOD1‚A0=ADDRESSMOVEFROM*œA1=ADDRESSMOVET0)*œD0=BITS‚0-15-->NUMBERBYTESTOMOVE(*¡BITS30„-->SPECIFICCHARACTERREMOVAL$*¡BITS16-23-->CHARACTERTOREMOVE***!*’METHOD2‚A0=ADDRESSMOVEFROM*œA1=ADDRESSMOVETO0*œD0=BITS31-->REG2HASENDINGFROMADDRESS(*¡BITS30„-->SPECIFICCHARACTERREMOVAL$*¡BITS16-23-->CHARACTERTOREMOVE$*œA2=ADDRESSLASTLOCATIONTOMOVE****ˆOUTPUT*’A0=A0+MOVECOUNT%*’A1=ADDRESSLASTCHARACTERMOVED+1*’A2=SAMEASINPUT'*’DATAMOVEDFROMSOURCETODESTINATION***ˆREGISTERSALTERED*’D0D1*O*******************************************************************************X70800:‰BTST.L„#31,D0 ‰BEQ.S…X70900*œJMPIFMETHOD1SPECIFIED ‰MOVE.L„A2,D1 ‰SUB.L…A0,D1*œD1=NUMBEROFBYTESTOMOVE ‰BRA.S…X71000 *œCONTINUEX70900: ‰CLR.L…D1 ‰MOVE.W„D0,D1&*œD1=NUMBE ROFBYTESTOCHARACTERFILLX71000:‰SWAP†D0*œPLACEOPTIONSIND0.W ‰TST.L…D1 ‰BRA.S…X71300*œESTABLISHD1STATUS*œENTERTOMOVELOOPX71100: ‰BTSTW…#14,D0 ‰BNE.S…X71400#*œJMPIFCHARACTERREMOVALSELECTEDX71200:‰MOVE.B„(A0)+,(A1)+X71220: ‰SUB.W…#1,D1X71300: ‰BNE.S…X71100*œMOVESOURCETODESTINATION*œJMPIFLOOPINCOMPLETE‰RTSX71400:‰CMP.B…(A0),D0 ‰BNE.S…X71200(*œJMPIFTHISISNOTCHARACTERTOREMOVE ‰TST.B…(A0)+!*œADJUSTPASTCHARACTERTOREMOVE ‰BRA.S…X71220*œRETURNTOMAINLOOP ‰PAGEO******************************************************************************** *ˆROUTINETO*’EXPANDAFILEDESCRIPTOR***ˆCALL†BSR‡X71700**ˆINPUT+*’A0=ADDRESSOFFILEDESCRIPTORTOEXPAND%*’A1=ADDRESSEXPANDFILEDESCRIPTOR**’FILEDESCRIPTORFORMAT* *’VOLUMEŽ4*’USERNUMBER‰2 *’CATALOG8 *’FILENAME‹8 *’EXTENSION‹2***ˆOUTPUT* *’A0=A0+24**’FILEDESCRIPTORFORMAT0*’VOLUME:USERNUMBER.CATALOG.FILENAME.EXTENSION**ˆREGISTERSDESTORYED *’D0D1D2*O*******************************************************************************X71700: ‰MOVE.B„#4,D0*œNUMBEROFBYTESTOMOVEX71800:‰MOVE.B„(A0)+,(A1)+ ‰SUB.B…#1,D0 ‰BNE.S…X71800*œMOVEVOLUMENAME‰MOVE.B„#':',(A1)+*œFILESEPARATOR ‰CLR.L…D0‰MOVE.B„(A0)+,D0 ‰ASL.W…#8,D0‰MOVE.B„(A0)+,D0*œD0=USERNUMBERTOCONVERT‰MOVE.L„A0,-(A7)*œA0=ADDRESSOFCATALOGNAME ‰MOVE.L„A1,A0*œA0=ADDRESSMOVECONVERSIONTO ‰MOVE.L„#4,D1 *œD1=NUMBEROFDIGITSTOCONVERT ‰BSR‡BINDECFJ*œCONVERTUSERNUMBER‰MOVE.B„#'.',(A0)+*œFILESEPARATOR ‰MOVE.L„A0,A1*œA1=ADDRESSMOVETO‰MOVE.L„(A7)+,A0*œA0=ADDRESSMOVEFROM‰MOVE.B„#18,D0*œD0=NUMBEROFBYTESTOMOVEX71900:‰MOVE.B„(A0)+,(A1)+ ‰SUB.B…#1,D0 ‰BEQ.S…X72100*œMOVE *¦CATALOG *¦FILENAME *¦EXTENSION*œJMPWHENDONE ‰CMP.B…#10,D0 ‰BEQ.S…X72000 ‰CMP.B…#2,D0 ‰BEQ.S…X72000*œJMPIFFILESEPARATORNEEDED ‰BRA.S…X71900*œRETURNTOLOOPX72000:‰MOVE.B„#'.',(A1)+*œFILESEPARATOR ‰BRA.S…X71900*œRETURNTOLOOPX72100:‰RTS‰PAGECLR_DET:‰LEA‡LISTDATA(PC),A0‰LEA‡LISTDESE(PC),A1**œSETSTART/ENDADDRESSFORCHARACTERFILL‰MOVE.L„#$80200000,D0*œD0=METHOD2CHARACTERFILL*¡FILLCHARACTER=SPACE ‰BSR‡X70300*œSPACEFILLDETAILLINE‰RTS‰PAGE*&*ˆ**CONVERTBINARYTOASCIIROUTINE**-*********************************************$*ˆBINARYTODECIMALASCIISUBROUTINE*REV1.00‚3/27.79GAT***16BITBINARYINPUT**4****************************************************6*ˆCONVERTSBINARYQUANTITYIND0TOASCIISTRINGWHICH *ˆISDEPOSITEDATLOCATION(A0)+**ˆCALLINGSEQUENCE:'*‹LOADD0WITHQUANTITYTOBECONVERTED.*‹LOADA0WITHADDRESSTODEPOSITASCIISTRING *‹JSRBINDEC*!*ˆREGISTERSUSED:01234567*“D„** *“A„*****ˆA1POINTSATBINARYTABLE*ˆA2POINTSATASCIITABLE*ˆD1ISWORKREGISTER**BINEQSƒDC.W0,1,10,100,1000)BINDECƒLEA‡BINEQS+8-PBA(A6),A1ƒADDR10**5*BINDE1ƒLEA‡BINASC(PC),A2†BASEADDRASCII0#BINDE2ƒSUB.W(A1),D0ŠSUBTRACT10**N‰BCS.SBINDE3BRANCHOVERBORROW&‰ADD.L#1,A2ŒINCREMENTNEXTASCIICHAR‰BRABINDE2CONTINUE'BINDE3ƒADD.W(A1),D0ŠRESTOREOVERBORROW!‰MOVE.B(A2),(A0)+†PUTASCIICHAR‰MOVE.W-(A1),D1ˆTESTDONE‰BNEBINDE1BRANCHNOTDONE‰RTS‰PAGEPRGM_SIZEQU‡*-PBA ‚END‚BEGPROC ‰ENDBEGPROC          éé é=/* =/*†LIST.AF=/*'=/* Chain file to assemble LIST utility=/*:=/* If no output argument is specified for the listing the&=/* chain file will default to LIST.LS=/*=/IFC \1 ƒ=ARGLIST.LS=/ENDIF=/*=ASM LIST.SA,LIST.RO,\1;RZ=106=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.FME.EQ=/*ƒ9995.&.IOE.EQ=/*}=/*=ENDééééééé=/* =/*†LIST.LF=/*%=/* Link chain file to create LIST.LO=/*:=/* If no output argument is specified for the listing the&=/* chain file will default to LIST.LL=/*=/IFC \1 ƒ=ARGLIST.LL=/ENDIF=/*=LINK ,LIST.LO,\1;HAMIX ATTRIBUTES PSEG SEG0:0,14 $0 INPUT LIST.ROLIB 0.&.UTILIB.ROEND=/*=ENDéééé ééòŠPAGELIST†IDNTƒ4,1LISTUTILITYŠTTL„LISTUTILITYH*************************************************************************$* ********** LIST UTILITY ***********5*ƒPURPOSE:‚PRODUCEAFORMATTEDLISTOFFILEORDEVICE*/*ƒENTRY:‚ENTRYVIASCT.‚COMMANDLINEFORMATIS:**‹LIST‚FN1,FN2;OPTIONS*/*‘WHEREFN1ANDFN2AREFILEORDEVICENAMESIN*‘STANDARDFORMAT.*)*‘OPTIONS:‚I-GOTOINTERACTIVEMODEFOR&*ŸBEGINNINGANDENDINGRECORDNUMBERS.)*›H-PROMPTFORHEADINGTOAPPEARATTOP*ŸOFEACHPAGE.**›F-PROMPTFORNON-STANDARDPAGEFORMAT."*›L-PUTLINENUMBERSINLISTING.)*›S-FORMISS=NWHERENISADECIMALOR'*ŸHEXNUMBERREPRESENTINGTHEBEGINNING*ŸRECORDNUMBERTOLIST.)*›T-FORMIST=NWHERENISADECIMALOR$*ŸHEXNUMBERREPRESENTINGTHEENDING*ŸRECORDNUMBERTOLIST.*.*‘INTERACTIVEINPUTLINEISONEOFFIVETYPES:**‘H‰DEFINESANEWHEADING*4*‘FNN,MMƒDEFINESNONSTANDARDROWANDCOLUMNFORMAT.(*›NNISTHENUMBEROFROWSONAPAGEAND(*›MMISTHENUMBEROFCOLUMNS(MAXIMUM).'*›ALEADING'$'IMPLIESHEXINPUT,ELSE*›DECIMALISASSUMED.*+*‘LNN†PUTSLINENUMBERSINTHELISTING.‚NN$*›DEFINESTHEBASELINENUMBERUSED.**5*‘DNN,MMƒSPECIFIESRANGEOFLOGOCALRECORDSTOLIST.**›ALEADING'$'SPECIFIESHEXNUMBER,ELSE*›DECIMALISASSUMED.**‘QUIT†TERMINATESLISTINGTASK*H*************************************************************************!ŠXREFƒPARSE,OPTION,EDITFILE,SBARG**‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.FME.EQ*‰INCLUDE9995.&.IOE.EQŠNOLISTŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.&.FME.EQŠINCLUDE9995.&.IOE.EQŠLIST* ŠSECTION0B‰EQU„*’BEGINNINGOFSECTION#ŠDC.Bƒ'1220844'‰VERSIONOFPROGRAM** LIST DATA AREA* ŠDS.Lƒ$20 STACK…EQU„*5SAVSTACK‚DS.Lƒ1’SAVEFORSTACKPOINTERONBREAKEVENT*#CLGH†EQU„$A0LENGTHOFCOMMANDLINE-CLINE…COMLINECLGHŽCOMMANDLINEINPUTTOTASKŠLIST*,INITDREG‚EQU„*’D-REGSSAVEDONINITIALENTRY ûMH TgX$B,F4A<>DCL>TE\BdCl=tI|E„@ŒM”5œF¤L¬K´/&ŠDS.Lƒ1’D0=TASKNAMETHATSTARTEDME+ŠDS.Lƒ1’D1=SESSIONNUMBERTHATSTARTEDME&VOLNAM„DS.Lƒ1’D2=DEFAULTVOLUMENAME'USERNUMƒDS.Lƒ1’D3=DEFAULTVOLUMENAME'CATNAM„DS.Lƒ1’D4=DEFAULTCATALOGNAME-ŠDS.Lƒ1’D5=2NDHALFOFDEFAULTCATALOGNAME2CCOUNT„DS.Lƒ1’D6=#OFCHARACTERSINCOMMANDLINESAVD7…DS.Lƒ1’D7=LUMASKINITA0„DS.Lƒ1’A0=TASKNAME*ŠDS.Lƒ1’A1=INTERACTIVEDEVICE(IE#CN13)"*‰DS.Lƒ1’A2=USERNUMBER(BINARY)*‰DS.Lƒ1’A3=SESSIONNUMBER*!* PARAMETER BLOCK TO ALLOCATE ASQASQ1†DC.Lƒ'LIST'TASKNAME(ŠDC.Lƒ0’SESSIONCODE(N/AFORUSERTASK)$ŠDC.Bƒ8’DISABLEREGSTACKING,ASR,ASQ#ŠDC.Bƒ20‘LONGESTMESSAGEACCEPTABLE ŠDC.Lƒ$100QUEUELENGTHIFBYTES,ŠDC.Lƒ0’ALTERNATESERVICEADDRESS(NOTUSED)$ŠDC.Lƒ0’ASRRECEIVINGAREA(DYNAMIC)*"ASQBUFFƒDS.Bƒ20‘ASRRECEIVINGAREA*%ASQDUN„DC.Wƒ-1‘FLAGFORASQALLOCATED** TIME PARAMETER BLOCK*TIMBLK„DS.Lƒ1’DATE ŠDS.Lƒ1’TIME*&TMPDATEƒDS.Lƒ1’TEMPORARYHOLDFORDATEHOLDDATE‚DS.Lƒ1*%RECADJ„DC.Lƒ0’RECORDADJ USTMENTVALUE*EDITSVA0‚DC.Lƒ0’SAVEFORA0AFTEREDITFILE0EDITOUTƒDC.Lƒ0’SAVEFOREDITFILEOFOUTPUTFIELD** PAGE FORMAT DATA AREA*-ROWMIN„EQU„10‘MINIMUMNUMBEROFROWSPERPAGE/COLMIN„EQU„1’MINUMUMNUMBEROFCOLUMNSPERPAGE(COLCNT„DC.Lƒ80‘DEFAULTNUMBEROFCOLUMNS%ROWCNT„DC.Lƒ60‘DEFAULTNUMBEROFROWS*,LNUM†DC.Lƒ0’CURRENTLINENUMBER(IFNONZERO)&LCNT†DC.Lƒ$7FFFFFFFŠLINECOUNTONPAGE*LNUMF…DC.Wƒ$FFFFŽLINENUMBERSDESIREDFLAGPNUM†DC.Lƒ0’PAGENUMBER/EJECTEDƒDC.Wƒ$FFFFŽFLAGFORPAGEEJECTEDORNOT*2RADIX…DC.Wƒ10‘RADIXFORASCIITOBINARYCONVERSION*,DOPCNT„DS.Lƒ1’SAVEFORLENGTHOFKEYEDINPUT+LISTED„DC.Wƒ$FFFFŽFLAGFORLISTINGPRODUCED**** OPTIONS TABLE FORMAT* OPTABLSƒEQU„* ŠOFFSET0ŠDS.Bƒ1’OPTIONLETTEROPTFL…DS.Bƒ1’OPTIONFLAG+OPTNUM„DS.Lƒ1’NUMBERASSOCIATEDWITHOPTION3OPTADR1ƒDS.Lƒ1’PROCADDRFORTHISOPTNONCMNDLINE4OPTADR2ƒDS.Lƒ1’PROCADDRFORTHISOPTNINTERACTIVELY OPTELGHƒEQU„* ŠSECTION0* OPTBL…MACROŠDC.Bƒ'\1'LETTERŠDC.Bƒ0’FLAG(INITIALLY=0)ŠDC.Lƒ0’OPTIONNUMBER/ŠDC.Lƒ\2-BPROCADDRFORTHISOPTNONCMNDLINE0ŠDC.Lƒ\3-BPROCADDRFORTHISOPTNINTERACTIVELYŠENDM*'HOPT†OPTBL‚H,HOPTC,HOPTI†HEADINGOPTION.ŠOPTBL‚F,FOPTC,FOPTI†NONSTANDARDFORMATOPTION/ŠOPTBL‚L,LOPTC,LOPTI†SUPPLYLINENUMBERSOPTION8DOPT†OPTBL‚D,DOPTC,DOPTI†INTERACTIVERECORDDISPLAYOPTN3ŠOPTBL‚S,SOPTC,SOPTI†STARTINGRECORDSPECIFIEDOPTN6ŠOPTBL‚T,TOPTC,TOPTI†TERMINATINGRECORDSPECIFIEDOPTN0IOPT†OPTBL‚I,IOPTC,IOPTI†INTERACTIVEMODEOPTION)QOPT†OPTBL‚Q,QOPTC,QOPTI†TERMINATEOPTION OPTABLEƒEQU„*'OPCNT…DC.Wƒ0’COUNTOFOPTIONSSPECIFIED/PARSAREG‚EQU„*’SAVEDA-REGSAFTERCALLTOPARSE1OUTPSRTƒDS.Lƒ1’A1=OUTPUTFIELDADDRESSFROMPARSE1OPTSRT„DS.Lƒ1’A2=OPTIONSFIELDADDRESSFROMPARSE$EDITRTNƒDS.Lƒ1’RETURNFROMEDITFILE$SRTREC„DC.Lƒ0’STARTINGRECORDNUMBER*ENDREC„DC.Lƒ$7FFFFFFFŠENDINGRECORDNUMBER* * LU EQUATES*(INPLUN„EQU„1’ASSOCIATEDWITHINPUTFIELD4LISTLUNƒEQU„3’ASSOCIATEDWITHLISTING(OUTPUTFIELD)*** CANNED MESSAGE AREA*"PROMPTCƒDC.Bƒ'>'PROMPTCHARACTERPROMPTCE‚EQU„*-1* * A LINE FEED* LF2‡DC.Bƒ$0D ŠDC.Bƒ$0AŠDS…0* HMSGS…EQU„* ŠDC.Bƒ$0D ŠDC.Bƒ$0A.ŠDC.Bƒ'Enterheading-60charactersmaximum:' ŠDC.Bƒ$0D ŠDC.Bƒ$0A HMSGE…EQU„*-1ŠDS…0’FORCEWORDBOUNDARY*!* AREA WHICH RECEIVES THE HEADING* FFOUTS„EQU„*ŠDC.Lƒ$200C0D00ŠFORMFEEDFFOUTE„EQU„*-2 HLINE…EQU„* ŠDC.Bƒ'PAGE‚'&ASCIIPGƒDC.Bƒ'†'‹FORASCIIPAGENUMBER ŠDC.Bƒ'‚'ŠDC.Bƒ'LISTVER‚'VERSIONƒDS.Lƒ2’FORVERSION ŠDC.Bƒ'‚'VDATE…DC.Bƒ'XX/XX/XX‚'VTIME…DC.Bƒ'XX:XX:XX‚'* HMSGI…EQU„*HDG2†DS.Bƒ130-(*-HLINE)HMSGIE„EQU„*-1"HDGEND„DC.Lƒ0’HOLDSHEADINGLENGTH* OPMSGS„EQU„* ŠDC.Bƒ$0D ŠDC.Bƒ$0A.ŠDC.Bƒ'Legaloptionsininteractivemodeare:' ŠDC.Bƒ$0D ŠDC.Bƒ$0AŠDC.Bƒ'''H''-Defineheading' ŠDC.Bƒ$0D ŠDC.Bƒ$0A6ŠDC.Bƒ'''F''-Definenonstandardrow&columncounts' ŠDC.Bƒ$0D ŠDC.Bƒ$0A2ŠDC.Bƒ'''L''-Putlinenumbersonlistingoutput' ŠDC.Bƒ$0D ŠDC.Bƒ$0A9ŠDC.Bƒ'''D''-Display(list)arangeoflogicalrecords' ŠDC.Bƒ$0D ŠDC.Bƒ$0AŠDC.Bƒ'''QUIT''-Toquit' ŠDC.Bƒ$0D ŠDC.Bƒ$0AOPMSGE„EQU„*-1ŠDS…0 FMSGS…EQU„* ŠDC.Bƒ$0D ŠDC.Bƒ$0A7ŠDC.Bƒ'Enterrowandcolumncountsseparatedbycomma:' ŠDC.Bƒ$0D ŠDC.Bƒ$0A FMSGE…EQU„*-1ŠDS…0** DMSGS…EQU„* ŠDC.Bƒ$0D ŠDC.Bƒ$0A+ŠDC.Bƒ'Enterstarting,endinglinenumbers:' ŠDC.Bƒ$0D ŠDC.Bƒ$0A DMSGE…EQU„*-1ŠDS…0* LMSGS…EQU„* ŠDC.Bƒ$0D ŠDC.Bƒ$0AŠDC.Bƒ'Enterbaselinenumber:' ŠDC.Bƒ$0D ŠDC.Bƒ$0A LMSGE…EQU„*-1*ŠDS…0’EVENBYTEBOUNDARY&DSOUTS„DC.Lƒ$0D0A0D0AŠDOUBLELINEFEEDDSOUTE„EQU„*-1*** DMSGBS„EQU„* ŠDC.Bƒ$0D ŠDC.Bƒ$0A(ŠDC.Bƒ'Enterrangeoflinesasfollows:' ŠDC.Bƒ$0D ŠDC.Bƒ$0A/ŠDC.Bƒ'''DS,T''tolistfromlineStolineT' ŠDC.Bƒ$0D ŠDC.Bƒ$0A)ŠDC.Bƒ'Aleading''$''implieshexinput' ŠDC.Bƒ$0D ŠDC.Bƒ$0A%ŠDC.Bƒ'SandTmustbelargerthan0' ŠDC.Bƒ$0D ŠDC.Bƒ$0ADMSGBE„EQU„*-1ŠDS…0’FORCEEVENBOUNDARY** FM SGBS„EQU„* ŠDC.Bƒ$0D ŠDC.Bƒ$0A/ŠDC.Bƒ'Enterrowandcolumncountsasfollows:' ŠDC.Bƒ$0D ŠDC.Bƒ$0A1ŠDC.Bƒ'''R,C''whereRistherowcountperpage' ŠDC.Bƒ$0D ŠDC.Bƒ$0A,ŠDC.Bƒ'andCisthecolumncount.‚Rmustbe' ŠDC.Bƒ$0D ŠDC.Bƒ$0A1ŠDC.Bƒ'greaterthan9.‚Cmustbegreaterthan0.' ŠDC.Bƒ$0D ŠDC.Bƒ$0AFMSGBE„EQU„*-1ŠDS…0*'* INPUT BUFFER FOR INTERACTIVE DIALOGUE*OPINLGHƒEQU„60‘LENGTH(BYTES)OPINPBUF‚DS.BƒOPINLGHŒBUFFERŠDS…0’EVENBYTEBOUNDARY**&*ƒCHANGELUASSIGNMENTPARAMETERBLOCK*.LDFLSTLU‚EQU„*’CHANGELUROMLDFLUNTOLISTLUN2ŠDC.WƒFHCHLUCODE=1,COMMAND=$10(CHANGELUASSGN)ŠDC.WƒFOPKEP+FOPSLU†KEEP,SENDŠDC.Bƒ0’STATUS%ŠDC.BƒLDFLUNSENDLOGICALUNITNUMBER)ŠDC.BƒLISTLUNŒRECEIVELOGICALUNITNUMBERŠDC.Bƒ0’RESERVEDŠDC.Lƒ0’TASKID(0=SELF)ŠDC.Lƒ0’SESSION#(0=SELF)*7*ƒASSIGNLISTINGLUTODEVICESPECIFIEDINOUTPUTFIELD*&ŠFHS.LISTFHASGN,FOPEW,LISTLUN,0,0,$00*4*ƒASSIGNINPUTLUTODEVICESPECIFIEDONINPUTFIELD*ŠFHS.INPFHASGN,FOPPR,INPLUN'ŠDC.Lƒ0’SHAREDSEGLOGSTARTINGADDRESS'ŠDC.Lƒ0’FHSFILLSINSEGENDINGADDRESS(ŠDC.Lƒ0’FHSFILLSINSHAREDSEGMENTNAME*3*‚I/OPARAMETERBLOCKFORGENERALMESSAGES(INPUT)*$ŠIOS.MSGIIOREAD,,CDFLUN,,,,,OPINLGH*+*I/OPARAMETERBLOCKFOR‚MESSAGES(OUTPUT)*$ŠIOS.MSGIOWRIT,IOPIMG+IOPCNP,LDFLUN* * I/O PARAMETER BLOCK FOR OUTPUT*ŠIOS.LSTIOWRIT,,LISTLUN*(* I/O PARAMETER BLOCK TO INPUT FROM FILE*'ŠIOS.INPIOREAD,IOPRAN,INPLUN,0,,,,LINL*'* ERROR MESSAGE HANDLER PARAMETER BLOCK*4ERRPBLKƒDC.Lƒ0’USERREGD0CONTAINSERRMSGKEYVALUE-ŠDC.Lƒ0’USERREGA0POINTSATI/OCONTROLBLK,ŠDC.Bƒ0’ERROROPTIONS[BIT0=QUERYRESPONSE]'ŠDC.BƒLDFLUNUSERLDFLUNLUNFORSCREENŠDC.Bƒ0’QUERYRETURNCHARACTER%ŠDC.BƒCDFLUNUSERCDFLUNFORKEYBOARD(ŠDC.Lƒ0’BEGINNINGOFUSERTEXTPLUGPOOL"ŠDC.Lƒ0’ENDOFUSERTEXTPLUGPOOL**#DVASGMSƒDC.Bƒ'Can''tlistadevice' ŠDC.Bƒ$0D ŠDC.Bƒ$0ADVASGMEƒEQU„*-1ŠDS…0*,CONMSGSƒDC.Bƒ'Can''tlistacontiguousfile' ŠDC.Bƒ$0D ŠDC.Bƒ$0ACONMSGEƒEQU„*-1ŠDS…0*:OVRMSGSƒDC.Bƒ'Outputfileexists-‚OKtooverwrite(Y/N)?' ŠDC.Bƒ$0D ŠDC.Bƒ$0AOVRMSGEƒEQU„*-1ŠDS…0**9INOUTS„DC.Bƒ'Error-inputandoutputnamesarethesame' ŠDC.Bƒ$0D ŠDC.Bƒ$0AINOUTE„EQU„*-1ŠDS…0+IOPTMSGS‚DC.Bƒ'Only''I''optionprocessed' ŠDC.Bƒ$0D ŠDC.Bƒ$0AIOPTMSGE‚EQU„*-1ŠDS…0** * I/O BUFFER*5ŠDS.Bƒ16-((*-B)-((*-B)/16)*16)FORCE16-BYTEBOUNDARY LNOUT1„DS.Bƒ6 ŠDC.Bƒ'‚' LINS†EQU„*LNOUT2„DS.Bƒ256 LINE†EQU„*-1LINL†EQU„LINE-LINS*ŠPAGEŠOPTMEX ŠOPTNOCLH************************************************************************* LIST CODE AREAH************************************************************************* LIST†EQU„*4ŠLEA„B(PC),A6BASEREGISTERFORPOSITIONINDEPENDENT*ŠLEA„STACK(PC),A7‹INITIALIZESTACKPOINTER7ŠMOVEM.LD0-D7/A0-A1,INITDREG-B(A6)INITIALD-REGISTERS%************************************** INITIALIZE DATA AREAS*.ŠMOVEM.L(A6),D0-D1ˆSETUPFORVERSIONMESSAGEŠMOVEM.LD0-D1,VERSION-B(A6)ŠLEA„OPINPBUF(PC),A0=ŠMOVE.LA0,MSGIIOS+IOSSAD-B(A6)BUFFERBASEFORMESSAGEINPUTŠLEA„OPINPBUF+OPINLGH-1(PC),A0<ŠMOVE.LA0,MSGIIOS+IOSEAD-B(A6)BUFFERENDFORMESSAGEINPUTŠLEA„LINS(PC),A09ŠMOVE.LA0,INPIOS+IOSSAD-B(A6)‚BUFFERBASEFORFILEINPUTŠLEA„LINE(PC),A08ŠMOVE.LA0,INPIOS+IOSEAD-B(A6)‚BUFFERENDFORFILEINPUT%**************************************.* GET DATE AND TIME SET UP FOR VERSION MESSAGE*%*************************************ŠMOVE.L#GTDTIM,D0ŠLEA„TIMBLK(PC),A0ŠTRAPƒ#1ŠMOVE.LTIMBLK-B(A6),D0ŠBSR„DATEOJCONVERTTOJULIAN ŠBSR„DATEJGCONVERTTOGREGORIAN*ŠMOVE.LD0,TMPDATE-B(A6)ƒSAVEORDINALDATEŠAND.L‚#$FF,D0ŒMASKTODAY ŠMOVE.L#2,D1ŠLEA„VDATE+3(PC),A0,ŠBSR„BINDECFJ‹CONVERTDAYTOASCIIANDSTUFF$ŠMOVE.BTMPDATE+2-B(A6),D0‡GETMONTHŠLEA„VDATE(PC),A0.ŠBSR„BINDECFJ‹CONVERTMONTHTOASCIIANDSTUFFŠMOVE.WTMPDATE-B(A6),D0‰YEARŠLEA„HOLDDATE(PC),A0+ŠBSR„BINDECCONV ERTYEARTOASCIIANDSTUFF&ŠMOVE.WHOLDDATE+2-B(A6),VDATE+6-B(A6) * CONVERT TIME OF DAY INTO ASCII*ŠMOVE.LTIMBLK+4-B(A6),D1ˆMSPASTMIDNIGHTŠCLR.L‚D0‘HOURCOUNTERTL1‡SUB.L‚#1000*60*60,D1&ŠBCS.S‚TL2BRANCHIFHOURSALLCOUNTEDŠADD.L‚#1,D0ŽACCUMULATEHOURS ŠBRA.S‚TL1/TL2‡ADD.L‚#1000*60*60,D1…TOTAL#HOURSISIND0 ŠMOVE.LD1,D3+ŠLEA„HOLDDATE(PC),A0ˆWHERETODEPOSITASCII,ŠBSR„BINDECCONVERTHOURTOBINARYANDSTUFF$ŠMOVE.WHOLDDATE+2-B(A6),VTIME-B(A6)&ŠDIVUƒ#60*1000,D3ˆ#OFMINUTESIND3.W ŠCLR.L‚D0%ŠMOVE.WD3,D0ŽNUMBEROFMINUTESIND0ŠLEA„HOLDDATE(PC),A0.ŠBSR„BINDECCONVERTMINUTESTOBNARYANDSTUFF&ŠMOVE.BHOLDDATE+2-B(A6),VTIME+3-B(A6)&ŠMOVE.BHOLDDATE+3-B(A6),VTIME+4-B(A6) ŠCLR.W‚D3ŠSWAPƒD3(ŠDIVUƒ#1000,D3‹NUMBEROFSECONDSIND3.W ŠMOVE.WD3,D0ŠLEA„HOLDDATE(PC),A0/ŠBSR„BINDECCONVERTSECONDSTOBINARYANDSTUFF&ŠMOVE.WHOLDDATE+2-B(A6),VTIME+6-B(A6)ŠPAGE** PARSE THE COMMAND LINE*,ŠLEA„CLINE(PC),A0‹INPUTCOMMANDLINEADDRESS ŠBSR„PARSE ŠTST.L‚D0&ŠBPL.S‚CMLOKŽBRANCHIFCOMMANDLINEOK4CLERR…MOVE.L#EM_NVE,D0‰COMPLAINOFBADCOMMANDLINE ŠBSR„ERRMSGŠBRA.S‚LISTERR CMLOK…EQU„*9ŠMOVEM.LA1-A2,PARSAREG-B(A6)SAVERETURNREGSFROMPARSE*@* ON RETURN FROM PARSE, A1=ADDR OF OUTPUT FIELD OR 0, A2=ADDR OF*‚OPTIONSFIELDOR0.*=* GET US SET UP SO THAT LU LISTLU (3) POINTS TO PROPER OUTPUT*)ŠMOVE.LA1,D0ŽJUSTTOSETCONDITIONCODES7ŠBNE.S‚GETOUTBRANCHIFWEHAVEOUTPUTDEVICESPECIFIED/ŠBSR„SETLSTLU‹CHANGELDFLUNTOLISTLUNANDKEEP)ŠBRA.S‚DOINPUTŒGOANALYZEINPUTPARAMETER GETOUT„EQU„*5ŠBSR.S‚CKINOUTŒCHECKFORINPUT/OUTPUTNAMESDIFFERENT,ŠBSR„NEWOUTSETUPOPERATORSPECIFIEDOUTPUT-ŠBSR„PRTSETSETPRINTERCOLUMNANDROWCOUNTS*<* GET US SET UP SO THAT LU INPUTLU(1) POINTS TO PROPER INPUT* DOINPUTƒEQU„* ŠBSR„NEWIN** SET UP DEFAULT HEADING* ŠBSR„DEFHDG** NOW PROCESS OPTIONS FIELD* ŠBSR„PROCOPT *,* NOW GO HANDLE THE USERS REQUEST, THEN EXIT* ŠBSR„DOITLISTEXIT‚CLR.L‚D0 ŠERQ.TERMLISTERRƒERQ.TERM#0,#$C000ŠPAGE$************************************G* SUBROUTINE TO SEE IF ANY INPUT FILE NAME MATCHES THE OUTPUT FILE NAME CKINOUTƒEQU„*)ŠMOVE.LA6,A1ŽSAVEA6FORDEFAULTS‚122084(ŠLEA„LISTFHS(PC),A6‰POINTTOPARAMTABLE2ŠMOVE.W#'LS',FHSEXT(A6)ƒDEFAULTEXTENSIONIS'LS' ŠBSR„DEFAULTS?ŠMOVE.LOUTPSRT-B(A1),A0ƒSTARTOFOUTPUTFIELDCMNDLINE‚122084*/* DO EDIT FILE TO FILL REMANING PARAMETER BLOCK ŠBSR„EDITFILEŠLEA„B(PC),A6REBASEA6 ŠTST.L‚D0%ŠBMI„CLERRŽBRANCHONBADCOMMANDLINE1ŠBTSTƒ#0,D0ŽISTHEREANOTHERFILEONOUTPUTPART? ŠBNE„CLERRŽBRANCHIFYES-ERROR2ŠMOVE.LD0,EDITOUT-B(A6)ƒSAVERETURNFROMEDITFILE*&ŠLEA„CLINE(PC),A0‹COMMANDLINEADDRESS)ŠMOVE.LA6,A1ŽSAVEA6FORDEFAULTS‚122084ŠLEA„INPFHS(PC),A6(ŠBSR„DEFAULTS‹FILLINPUTFHSPARAMBLOCK9NEWINE1ƒMOVE.W#'SA',FHSEXT(A6)ƒDEFAULTEXTENSIONIS'SA' ŠBSR„EDITFILEŠLEA„B(PC),A6REBASEA6ŠMOVE.LA0,EDITSVA0-B(A6)ŠMOVE.LD0,EDITRTN-B(A6)ŠLEA„INPFHS+FHSVOL(PC),A1ŠLEA„LISTFHS+FHSVOL(PC),A2ŠLEA„INPFHS+FHSEXT(PC),A0CMPINOUT‚CMPM.W(A1)+,(A2)+ŠBNE.S‚NMCHBRANCHIFNOMATCH ŠCMP.L‚A0,A1ŠBLS.S‚CMPINOUT*%* INPUT FILE = OUTPUT FILE - COMPLAIN8ŠLEA„INOUTS(PC),A0Š'ERROR-INPUTANDOUTPUTNAMESSAME'ŠLEA„INOUTE(PC),A1 ŠBSR„MSGOUTIŠBRA„LISTERRŒABNORMALEXIT*NMCH†MOVE.LEDITSVA0-B(A6),A0>ŠBTSTW‚#0,EDITRTN+2-B(A6)ISTHEREANOTHERFILEONINPUTLINE?'ŠBNE.S‚NEWINE1ŒGOCHECKFORMATCHAGAINŠRTS„OK‘-SORETURN%*************************************%* SUBROUTINE TO PROCESS OPTIONS FIELD)*ƒSCANSUNTILOPTIONSFIELDISEXHAUSTED.*ƒINITIALIZESOPTIONSTABLE.;*ƒPUTSUPERRORMESSAGEANDBRANCHESTOLISTERRIFERRORIS*ƒENCOUNTERED.** PROCOPTƒEQU„*.ŠMOVE.LOPTSRT-B(A6),A2ŠSTARTOFOPTIONSFIELD$ŠMOVE.LA2,D0ŽTOSETCONDITIONCODES"ŠBEQ.S‚OPTOVRBRANCHIFNOOPTIONS NXTOPT„EQU„* ŠCLR.L‚D3 ŠBSR„OPTION ŠBTSTƒ#7,D0ŽWASTHEREANDERROR?ŠBEQ.S‚NXTOPT2ŒBRANCHIFNO3ŠBSR.S‚BADOPTYES-COMPLAINVIAERRORMESSAGEHDLR ŠBRA„LIS TERR7NXTOPT2ƒCMP.B‚#$40,D0ŒHAVEWEFINISHEDALLTHEOPTIONS?ŠBEQ.S‚OPTOVRBRANCHIFYES#ŠAND.B‚#$10,D0ŒSEEIF'='SPECIFIEDŠBNE.S‚EQUALSPŒBRANCHIFNO ŠCLR.L‚D3‘FORCEZEROIFNOEQUAL EQUALSPƒEQU„*ŠMOVE.LA2,-(A7) ŠBSR.S‚OPTABLŠBRA.S‚OPOKBRANCHIFOPTIONOK$ŠBSR.S‚BADOPTCOMPLAINIFOPTIONBADŠBRA„LISTERRŒGETOUTOPOK†MOVE.L(A7)+,A2 ŠMOVE.L#1,D0:ŠADD.W‚D0,OPCNT-B(A6)…BUMPNUMBEROFOPTIONSFOUNDCOUNTER(ŠMOVE.LD3,OPTNUM(A0)†SAVEOPTIONNUMBER0ŠBNE.S‚NXTOPTBRANCHIFNONZERONUMBERSPECIFIED&ŠCMP.B‚#'L',D1ŒWASTHISTHE'L'OPTIONŠBNE.S‚NXTOPTBRANCHIFNO8ŠMOVE.L#1,OPTNUM(A0)†0ILLEGALFOR'L'OPT-FORCETO1 ŠBRA.S‚NXTOPTGOFORNEXTOPTION3OPTOVR„TST.B‚QOPT+1-B(A6)‡WAS'Q'OPTIONSPECIFIED?ŠBNE.S‚OPTOVR2ŒBRANCHIFYES-ŠTST.B‚DOPT+1-B(A6)‡WAS'D'OPTIONSPECIFIED?ŠBEQ.S‚OPTOVR4ŒBRANCHIFNO)OPTOVR2ƒBSR.S‚BADOPTBADOPTIONSPECIFIED ŠBRA„LISTERROPTOVR4ƒMOVE.L#1,D01ŠCMP.W‚OPCNT-B(A6),D0‹SEEIFMORETHANONEOPTIONŠBHS.S‚OPTOVXBRANCHIFNO-ŠTST.B‚IOPT+1-B(A6)‡WAS'I'OPTIONSPECIFIED?ŠBEQ.S‚OPTOVXBRANCHIFNOŠLEA„IOPTMSGS(PC),A0ŠLEA„IOPTMSGE(PC),A14ŠBSR„MSGOUTIŒLETTHEMKNOWONLY'I'OPTIONPROCESSED OPTOVX„RTS* BADOPT„EQU„*2ŠMOVE.L#EM_NVO,D0‰KEYFORINVALIDOPTIONSMESSAGE.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN,ŠBTSTƒ#0,SAVD7+3-B(A6)ƒAREWEINCHAINMODE?"ŠBEQ„LISTERRŒBRANCHIFYES-ERRORŠRTS$************************************E* SUBROUTINE TO HUNT FOR OPTION LETTER AMONG LEGAL LETTERS IN OPTABLS*ƒINPUT:ƒD1-OPTIONLETTER)*ƒOUTPUT:‚OUTPUTFLAGSETINOPTIONTABLE*POSITIVEIFNO"-"SPECIFIED*NEGATIVEIF"-"SPECIFIED*ŒA0-POINTSTOTABLEENTRY(*ŒA1-CONTAINSFIRSTPROCESSINGADDRESS)*ŒA2-CONTAINSSECONDPROCESSINGADDRESS!*ŒRETURNTOPCIFOPTIONISLEGAL%*ŒRETURNTOPC+2IFOPTIONISILLEGAL* OPTABL„EQU„*)ŠLEA„OPTABLS(PC),A0‰STARTOFOPTIONTABLE'ŠLEA„OPTABLE(PC),A1‰ENDOFOPTIONTABLE)CMPNXTOƒCMP.B‚(A0),D1ŒISTHISTHEOPTION?,ŠBEQ.S‚OPFOUNDŒBRANCHIFWEFOUNDTHEOPTION+ŠADD.W‚#OPTELGH,A0ˆEXAMINENEXTTABLEENTRYŠCMP.L‚A0,A1ŽAREWETHROUGH?ŠBNE.S‚CMPNXTOŒBRANCHIFNOT&ŠADD.L‚#2,(A7)ŒBIASRETURNFORNOFINDŠBRA.S‚OPTABLRŒRETURNTOCALLER OPFOUNDƒEQU„*$ŠMOVEQ‚#1,D0ŽASSUMENO"-"SPECIFIED ŠTST.L‚D1$ŠBHI.S‚OPFLAGSŒBRANCHIFIWASRIGHTŠMOVEQ‚#-1,D0FLAGSETTOMINUS(OPFLAGSƒMOVE.BD0,OPTFL(A0)‡SETTHEFLAG)ŠMOVE.LOPTADR1(A0),A1…PROCESSINGADDRESS)ŠMOVE.LOPTADR2(A0),A2…PROCESSINGADDRESSŠADD.L‚A6,A1ŽADDBASEADDRESS ŠADD.L‚A6,A2%ŠCLR.L‚D0‘SETCONDITIONCODESTOZEROOPTABLRƒRTS„BACKTOMAINLINEŠPAGE$************************************B* SUBROUTINE TO SET UP LISTLUN (NORMALLY 3) TO DEVICE SPECIFIED ON*ƒOUTPUTPARAMETER.** NEWOUT„EQU„*** SEE IF OUTPUT IS A DEVICE<ŠMOVE.LEDITOUT-B(A6),D0‰SAVEDFROMEDITFILEOFOUTPUTFIELDŠBTSTƒ#1,D0ŽISOUTPUTADEVICE?ŠBNE.S‚YESDEVBRANCHIFYES5ŠMOVE.L#132,COLCNT-B(A6)‚ADJUSTDEFAULTCOLUMNCOUNT* TRY TO ASSIGN OUTPUT FILE6ŠMOVE.W#FHASGN,LISTFHS+FHSCMD-B(A6)SETUPFORASSIGNŠLEA„LISTFHS(PC),A0ŠTRAPƒ#3%ŠBEQ.S‚OVRWRITE‹BRANCHIFGOODASSIGN>* ASSIGN FAILED - SEE IF NONEXISTENT FILE AND IF NOT, COMPLAINŠCMP.B‚#FSTANNM,D0$ŠBEQ.S‚ASGALLOŒBRANCHIFNONEXISTENT.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAINŠBRA„LISTERRŒABNORMALEXIT*"* ASK IF THEY WISH US TO OVERWRITE7OVRWRITE‚LEA„OVRMSGS(PC),A0‰'DOYOUWISHTOOVERWRITE?'ŠLEA„OVRMSGE(PC),A1 ŠBSR„MSGOUTI ŠBSR„POUTIN ŠMOVE.BOPINPBUF-B(A6),D0ˆANSWERŠCMP.B‚#'Y',D0ŠBNE„LISTEXIT‹BRANCHIFNO*B*THEYWISHTOOVERWRITEAFILETHATALREADYEXISTS.‚FREETHEFILE1*ƒANDDELETEIT,THENREALLOCATEITANDASSIGNIT2ŠMOVE.W#FHCLOS,LISTFHS+FHSCMD-B(A6)CLOSECOMMANDŠLEA„LISTFHS(PC),A0ŠTRAPƒ#33ŠMOVE.W#FHDELT,LISTFHS+FHSCMD-B(A6)DELETECOMMANDŠTRAPƒ#3"ŠBEQ.S‚ASGALLOŒBRANCHIFDELETEOK.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN ŠBRA„LISTERR** ALLOCATE AND ASSIGN FILE2ASGALLOƒMOVE.W#FHASGN+FHALLO,LISTFHS+FHSCMD-B(A6)3ŠCLR.L‚LISTFHS+FHSLRL-B(A6)VARIABLELENGTHRECORDS?ŠMOVE.W#FOPSEQ+FO PEW,LISTFHS+FHSOPT-B(A6)SEQ,EXCLUSIVEWRITE ŠBRA.S‚ASGIT*<* IF OUTPUT FIELD WAS JUST A '#' THEN HANDLE AS SPECIAL CASE*;YESDEV„AND.W‚#(1<<14+1<<1),D0ƒSEEIFJUST'#'WASSPECIFIEDŠCMP.W‚#(1<<14+1<<1),D0#ŠBNE.S‚ASGITŽBRANCHIFNOTJUST'#'*ŠBSR„SETLSTLU‹CHANGELUNUMBERFORLISTING ŠBRA.S‚ASGOK1** ASSIGN TO LISTLU*ASGIT…LEA„LISTFHS(PC),A0ŠTRAPƒ#3)ŠBEQ.S‚ASGOK1BRANCHIFASSIGNMENTWASOK5ASGERRMƒBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAINŠBRA„LISTERRŒGETOUT ASGOK1„RTS%*************************************:* SUBROUTINE TO ASSIGN INPUT DEVICE TO INPLUN (NORMALLY 1)* NEWIN…EQU„**NEWIN1„LEA„CLINE(PC),A0/NEWIN2„MOVE.LA6,A1ŽSAVEA6FORDEFAULTS‚122084"ŠLEA„INPFHS(PC),A6ŠINPUTFHSBLOCKŠBSR.S‚DEFAULTS ŠBSR„EDITFILE ŠLEA„B(PC),A6ŠMOVE.LA0,EDITSVA0-B(A6)2ŠMOVE.LD0,EDITRTN-B(A6)ƒSAVERETURNFROMEDITFILEŠBMI„CLERRŽBRANCHONEDITERRORŠAND.L‚#$400,D0+ŠBEQ.S‚EXTSPCBRANCHIFEXTENSIONSPECIFIED8ŠMOVE.W#'SA',INPFHS+FHSEXT-B(A6)DEFAULTTOEXTOF'SA' EXTSPC„EQU„*"* INSURE THAT THIS IS NOT A DEVICEŠMOVE.LEDITRTN-B(A6),D1 ŠAND.B‚#2,D1)ŠBEQ.S‚NEWINOK1‹BRANCHIFNOTDEVICE(OK)5ŠLEA„DVASGMS(PC),A0‰COMPLAINOFTRYINGTOLISTDEVICEŠLEA„DVASGME(PC),A1 ŠBSR„MSGOUTI ŠBRA„LISTERRŒGETOUTIMMEDIATELY*NEWINOK1‚EQU„** NOW ASSIGN THE INPUT DEVICE*%ŠLEA„INPFHS(PC),A0ŠCOMMANDLINESTUFFŠTRAPƒ#3#ŠBNE„ASGERRMŒBRANCHONASSIGNERRORŠMOVE.WINPFHS+FHSOPT-B(A6),D0,ŠAND.W‚#FFTBIT,D0‰ISTHISACONGIGUOUSFILE?ŠBNE.S‚NEWINOK4‹BRANCHIFNO6ŠLEA„CONMSGS(PC),A0‰TELLTHEMWECAN'TLISTCONTIGUOUSŠLEA„CONMSGE(PC),A1 ŠBSR„MSGOUTIŠBRA„LISTERRŒERROREXIT NEWINOK4‚RTS%*************************************F* SUBROUTINE TO PUT DEFAULT VALUES INTO FHS PARAMETER BLOCK POINTED TO9*ƒBYA6.‚BASEREGISTERHASBEENPUTINTOA1FORTHISS/R.*DEFAULTS‚EQU„*3ŠMOVE.WUSERNUM+2-B(A1),FHSUSN(A6)DEFAULTUSERNUM+ŠMOVE.LVOLNAM-B(A1),FHSVOL(A6)‚VOLUMENAME,ŠMOVE.LCATNAM-B(A1),FHSCLG(A6)‚CATALOGNAME8ŠMOVE.LCATNAM+4-B(A1),FHSCLG+4(A6)2NDPARTOFCATNAMEŠRTS%*************************************A* SUBROUTINE TO CHANGE LOGICAL UNIT NUMBER FROM LDFLUN TO LISTLUN *ƒWITHKEEP.*SETLSTLU‚EQU„*ŠLEA„LDFLSTLU(PC),A0ŠTRAPƒ#3#ŠBEQ.S‚SETLSTEX‹BRANCHIFNOERRORS.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN ŠBRA„LISTERR SETLSTEX‚RTS%*************************************=* SUBROUTINE TO FETCH DEVICE ATTRIBUTES AND SET UP PARAMETERS;*ƒFORPRETTYPRINTIFOUTPUTDEVICESPECIFIEDWASAPRINTER* PRTSET„EQU„*9ŠMOVE.W#FHRATT,LISTFHS-B(A6)MAKECODEANDOPTIONSRIGHT&ŠLEA„LISTFHS(PC),A0‰RECEIVEATTRIBUTESŠTRAPƒ#3!ŠBEQ.S‚PRTSET2ŒBRANCHIFNOERROR ŠBSR„ERRMSG ŠBRA„LISTERR6PRTSET2ƒMOVE.WLISTFHS+FHSWCD-B(A6),D0‚ATTRIBUTESWORDŠBTSTƒ#9,D0ŽWASITAPRINTER?"ŠBEQ.S‚PRTSETXŒEXITIFNOTPRINTER8ŠMOVE.LLISTFHS+FHSSIZ-B(A6),ROWCNT-B(A6)SAVEROWCOUNT6ŠSUB.L‚#6,ROWCNT-B(A6)„BIASFORTOPANDBOTTOMMARGINS;ŠMOVE.WLISTFHS+FHSLRL-B(A6),COLCNT-B(A6)SAVECOLUMNCOUNT PRTSETXƒRTS%*************************************>* SUBROUTINE TO OUTPUT MESSAGE, THEN SOLICIT INPUT WITH PROMPT**0*ƒINPUT:ƒA0-STARTADDRESSOFMESSAGETOOUTPUT'*ŒA1-ENDADDRESSOFMESSAGETOOUTPUT*ƒOUTPUT:‚A0-DESTROYED8*ŒZEROSTATUSREFLECTSGOODI/O-NONZEROREFLECTSERROR4*ŒINPUTBUFFERISDEFINEDINMSGIIOSPARAMETERBLOCK*MSGOUTIN‚EQU„*ŠBSR.S‚MSGOUTIŒOUTPUTMESSAGEŠBNE.S‚MSGOIXBRANCHONERROR1POUTIN„LEA„PROMPTC(PC),A0‰SETUPTOOUTPUTPROMPTŠLEA„PROMPTCE(PC),A1ŠBSR.S‚MSGOUTIŒOUTPUTPROMPTŠBNE.S‚MSGOUTER‹BRANCHIFERROR ŠLEA„MSGIIOS(PC),A0‰ACCEPTINPUTŠTRAPƒ#2ŠBEQ.S‚MSGIISUBMSGOUTER‚CMP.B‚#ISTABRK,D0 ŠBEQ„BREAKSV2PERR†BSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN ŠBRA„LISTERRMSGIISUB‚BSR„SBARG ŠBNE„PERR MSGOIX„RTS%************************************** SUBROUTINE TO OUTPUT MESSAGES**ƒENTRY:A0=BEGINNINGADDRESSOFMESSAGE *ŠA1=ENDINGADDRESSOFMESSAGE*-MSGOUTIƒOR.W ƒ#(1<-OKŠCMP.B‚#'',D1)ŠBNE.S‚IOPTBAD2‹BRANCHIFNOTBLANK-BAD!IOPG2…MOVE.B0(A1,D2.L),D1†LETTER1ŠMOVEM.LA1/D0/D2,-(A7)„SAVEGOODSTUFFTHRUCALLŠBSR„OPTABLGOFINDOPTION#ŠBRA.S‚IOPTOK1ŒBRANCHIFOPTIONSOK(ŠADD.L‚#12,A7BYPASSSAVEDREGSONSTACK*IOPTBAD2‚BSR„BADOPTCOMPLAINOFBADOPTION"ŠBRA„IOPTCŽGOTAKENEXTSUBCOMMAND IOPTOK1ƒEQU„*.ŠMOVEM.L(A7)+,A1/D0/D2„RESTOREGOODREGISTERSŠJSR„(A2)GOHANDLEOPTIONŠBRA„IOPTC2GOFORNEXTOPTION%*************************************8* SUBROUTINE TO SKIP BLANKS ON LINE OF INTERACTIVE INPUT#*ƒINPUT:‚D0=LENGTHOFKEYEDINPUT9*‹D2=WHENADDEDTOA1,POINTSTOCHARACTERINTEXTLINE*‹A1=BASEOFKEYEDINPUT*ƒOUTPUT:PCIFNONBLANKFOUND/*‹PC+2IFLINEEXHAUSTEDBEFORENONBLANKFOUND8*‹D2=REFLECTSCHARACTERPOSITIONOFNONBLANKCHARACTER* BLNKSKPƒEQU„*-ŠCMP.L‚D0,D2ŽAREWEPASTTHEENDOFTHELINE?ŠBHI.S‚BLNKSKX1‹BRANCHIFYESŠCMP.B‚#'',0(A1,D2.L)+ŠBNE.S‚BLNKSKX2‹BRANCHIFNO-WE'VEGOTIT'ŠADD.L‚#1,D2ŽNO-SOTRYNEXTCHARACTERŠBRA.S‚BLNKSKP)BLNKSKX1‚ADD.L‚#2,(A7)ŒENDOFLINERETURN BLNKSKX2‚RTS*B*  COME HERE FOR THOSE OPTIONS THAT DON'T APPLY IN INTERACTIVE MODE* IOPTI…EQU„* SOPTI…EQU„* TOPTI…EQU„*5ŠMOVE.L#EM_NVE,D0‰LETERRORMESSAGEHANDLERCOMPLAIN ŠBSR„ERRMSG,ŠBTSTƒ#0,SAVD7+3-B(A6)ƒAREWEINCHAINMODE?ŠBEQ„LISTERRŒBRANCHIFYESŠRTS*$* S OPTION SPECIFIED ON COMMAND LINE* SOPTC…EQU„* ŠTST.L‚D0&ŠBNE.S‚SOPTC4BRANCHIFNUMBEROK<>0SOPTC2„MOVE.L#EM_NVE,D0.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN ŠBRA„LISTERR7SOPTC4„SUB.L‚#1,D0ŽCORRECTLINENUMBERTORECORDNUMBERŠMOVE.LD0,SRTREC-B(A6)ŠRTS*$* T OPTION SPECIFIED ON COMMAND LINE* TOPTC…EQU„* ŠTST.L‚D0"ŠBEQ.S‚SOPTC2BRANCHIFBADNUMBER1ŠSUB.L‚#1,D0ŽCORRECTLINENUMBERTORECORDNUMBERŠMOVE.LD0,ENDREC-B(A6)ŠRTS*$* D OPTION SPECIFIED ON COMMAND LINE* DOPTC…EQU„*ŠRTS—IGNORETHISOPTIONŠPAGE*** HEADING OPTION SPECIFIED ON COMMAND LINE+*ƒCOMMANDLINEMODULESALWAYSENTEREDWITH:*…D0=OPTIONNUMBER#*…A0=POINTSTOOPTIONTABLEENTRY* HOPTC…EQU„*%ŠBSR.S‚BLNKHDGŒBLANKOUTHEADINGLINE0ŠLEA„HMSGS(PC),A0‹TELLTHEMTOENTERTHEHEADINGŠLEA„HMSGE(PC),A1 ŠBSR„MSGOUTINŠBNE„LISTERRŒBRANCHIFERRORS7ŠMOVE.LMSGIIOS+IOSLEN-B(A6),D0‚LENGTHOFHEADINGINPUT$ŠCLR.L‚D2‘POINTERTOFIRSTCHARACTERŠLEA„OPINPBUF(PC),A1#ŠBSR.S‚GETHDGSAVETHEHEADINGAWAYŠBRA.S‚HOPEXITŒGETOUT*(* HEADING OPTION SPECIFIED INTERACTIVELY**ƒINTERACTIVEMODULESALWAYSENTEREDWITH:"*…D0=TOTALLENGTHOFKEYEDINPUT@*…D2=OFFSETFROMBEGINNINGOFKEYEDINPUTTOSUBCOMMANDLETTER*…A1=BEGINNINGOFKEYEDINPUT** HOPTI…EQU„*%ŠADD.W‚#1,D2ŽBYPASSSUBCOMMANDLETTER%ŠCMP.L‚D0,D2ŽSEEIFOVERENDOFINPUT2ŠBLT.S‚HOPTI10ŒBRANCHIFHEADINGSPECIFIEDONLINE1ŠBSR.S‚HOPTCŽHANDLEHEADINGNOTSPECIFIEDONLINEŠBRA.S‚HOPRTSGETOUT*'HOPTI10ƒEQU„*’HEADINGSPECIFIEDONLINE1ŠADD.L‚#1,D2ŽPOINTSCANNERTO1STCHAROFHEADING%ŠBSR.S‚BLNKHDGŒBLANKOUTHEADINGLINE'ŠSUB.L‚D2,D0ŽCORRECTLENGTHFORHEADING ŠBSR.S‚GETHDGHOPEXITƒLEA„HMSGI(PC),A0*ŠADD.L‚A0,D0ŽACTUALHEADINGENDINGADDRESSŠMOVE.LD0,HDGEND-B(A6) HOPRTS„RTS * SUBROUTINES FOR HEADING OPTION BLNKHDGƒEQU„*&ŠMOVE.L#'„',D4‰BLANKOUTHEADINGLINEŠLEA„HMSGIE(PC),A3 ŠMOVE.LA3,D3ŠLEA„HMSGI(PC),A3HOPTL1„MOVE.LD4,(A3)+ ŠCMP.L‚D3,A3 ŠBCS.S‚HOPTL1ŠRTS6* ENTRY: D0=LENGTH, (A1,D2.L) POINT TO FIRST CHARACTER GETHDG„EQU„*#ŠLEA„HMSGI(PC),A2‹"MOVETO"ADDRESS ŠADD.L‚D2,A1Ž"MOVEFROM"ADDRESSŠMOVE.LD0,D1ŽLENGTH:GETHDGL1‚MOVE.B(A1)+,(A2)+ˆMOVEHEADINGTOITSOWNBUFFER ŠSUB.L‚#1,D1 ŠBGT„GETHDGL1ŠRTSŠPAGE*3* NONSTANDARD PAGE FORMAT SPECIFIED ON COMMAND LINE* FOPTC…EQU„*1ŠLEA„FMSGS(PC),A0‹TELL'EMTOENTERROW,COLCOUNTŠLEA„FMSGE(PC),A1 ŠBSR„MSGOUTINŠBNE„LISTERRŒBRANCHIFERRORS/ŠMOVE.LMSGIIOS+IOSLEN-B(A6),D0‚LENGTHOFINPUTŠCLR.L‚D2‘CHARACTEROFFSET.FOPTC1„LEA„OPINPBUF(PC),A1ˆSTARTOFINPUTLINE ŠBSR„BLNKSKPŠBSR„ASCBINGETBINARYINTOD04ŠCMP.L‚#ROWMIN,D0‰SEEIFDECLAREDROWSIZEINBOUNDS"ŠBGE.S‚ROWOKŽBRANCHIFROWSIZEOK2ROWSET„MOVE.L#EM_NVE,D0‰TELL'EMTHEYDIDANO-NO.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN,ŠBTSTƒ#0,SAVD7+3-B(A6)ƒAREWEINCHAINMODE?ŠBEQ„LISTERRŒBRANCHIFYES,ŠLEA„FMSGBS(PC),A0ŠTELLTHEMHOWTOENTERITŠLEA„FMSGBE(PC),A1 ŠBSR„MSGOUTI&ŠBRA„FOPTCŽGOGIVETHEMANOTHERCHANCE6ROWOK…MOVE.LD0,ROWCNT-B(A6)„UPDATEWITHNEWROWCOUNTŠADD.L‚#1,D2ŽBYPASSCOMMA"ŠBSR„ASCBINGETCOLUMNCOUNTIND04ŠCMP.L‚#COLMIN,D0‰SEEIFDECLAREDCOLSIZEINBOUNDS%ŠBGE.S‚COLOKŽBRANCHIFCOLUMNSIZEOK'ŠBRA.S‚ROWSETTELL'EMTHEYDIDANO-NO>COLOK…MOVE.LD0,COLCNT-B(A6)„UPDATEWITHDECLAREDCOLUMNCOUNTŠBRA.S‚FOPEXIT*1* NONSTANDARD PAGE FORMAT SPECIFIED INTERACTIVELY* FOPTI…EQU„*%ŠADD.W‚#1,D2ŽBYPASSSUBCOMMANDLETTER ŠBSR„BLNKSKPŒFINDFIRSTNONBLANKŠCMP.L‚D0,D2ŽANYMORECHARS&ŠBLT.S‚FOPTC1YESGOUSETHEMASINPUT ŠBRA„FOPTCŽNO-GOSOLICITINPUT* FOPEXITƒRTS*,* LINE NUMBER OPTION SPECIFIED INTERACTIVELY* LOPTI…EQU„*%ŠADD.W‚#1,D2ŽBYPASSSUBCOMMANDLETTER ŠBSR„BLNKSKP) ŠCMP.L‚D0,D2ŽANYMORECHARACTERSINLINE?(ŠBLT.S‚LOPT10YES-GOUSETHEMASINPUT8ŠLEA„LMSGS(PC),A0‹ASKTHEMTOENTERTHEBASELINENUMBERŠLEA„LMSGE(PC),A1 ŠBSR„MSGOUTINŠBNE„LISTERRŒBRANCHIFERRORS/ŠMOVE.LMSGIIOS+IOSLEN-B(A6),D0‚LENGTHOFINPUT#ŠLEA„OPINPBUF(PC),A1ˆSTARTOFINPUTŠCLR.L‚D2‘CHARACTERPOINTER'LOPT10„BSR„BLNKSKPŒSKIPTONUMBERINPUTŠBSR„ASCBINGOGETBINARYIND0 ŠTST.L‚D0"ŠBEQ.S‚LOPT15BRANCHONBADNUMBER*9* CHECK TO INSURE NO INVALID STUFF ON THE SUBCOMMAND LINE*9ŠSUB.L‚MSGIIOS+IOSLEN-B(A6),D2‚SHOULDBETHROUGHTHELINEŠBEQ.S‚LOPTCŽBRANCHIFOK2LOPT15„MOVE.L#EM_NVE,D0‰COMPLAINOFINVALIDINPUT ŠBSR„ERRMSG,ŠBTSTƒ#0,SAVD7+3-B(A6)ƒAREWEINCHAINMODE?ŠBEQ„LISTERRŒBRANCHIFYES/ŠBRA.S‚LOPEXITŒGETOUTANDLETTHEMDOITAGAIN*.* LINE NUMBER OPTION SPECIFIED ON COMMAND LINE* LOPTC…EQU„*&ŠMOVE.LD0,LNUM-B(A6)†SAVELINENUMBER8ŠCLR.W‚LNUMF-B(A6)ˆFLAGTOPUTINLINENUMBERSONOUTPUT LOPEXITƒRTS*8* QUIT OPTION SPECIFIED ON COMMAND LINE (ILLEGAL OPTION)* QOPTC…EQU„*ŠRTS** QUIT SPECIFIED INTERACTIVELY* QOPTI…EQU„* ŠBSR„EJECTPGŠBRA„LISTEXIT‹EXITIMMEDIATELY**"* D OPTION SPECIFIED INTERACTIVELY* DOPTI…EQU„*%ŠADD.W‚#1,D2ŽBYPASSSUBCOMMANDLETTER ŠBSR„BLNKSKP%ŠCMP.L‚D0,D2ŽSEEIFOVERENDOFINPUT2ŠBLT.S‚DOPTI10ŒBRANCHIFDISPLAYSPECIFIEDONLINE4ŠLEA„DMSGS(PC),A0‹TELLTHEMTOENTERSTARTINGENDINGŠLEA„DMSGE(PC),A1 ŠBSR„MSGOUTINŠBNE„LISTERRŒBRANCHIFERROR7ŠMOVE.LMSGIIOS+IOSLEN-B(A6),D0‚LENGTHOFHEADINGINPUT ŠCLR.L‚D2)ŠLEA„OPINPBUF(PC),A1ˆSTARTOFKEYEDINPUT DOPTI10ƒEQU„*2ŠMOVE.LD0,DOPCNT-B(A6)„SAVELENGTHOFKEYEDINPUT ŠBSR„BLNKSKP ŠBRA.S‚DOPOK1.DOPBAD„MOVE.L#EM_NVE,D0‰TELLOFINVALIDENTRY ŠBSR„ERRMSG,ŠBTSTƒ#0,SAVD7+3-B(A6)ƒAREWEINCHAINMODE?ŠBEQ„LISTERRŒBRANCHIFYESŠLEA„DMSGBS(PC),A0ŠBADENTRY,ŠLEA„DMSGBE(PC),A1ŠTELLTHEMHOWTOENTERITŠBSR„MSGOUTIŒCORRECTINPUTŠBRA.S‚DOPEXIT*)DOPOK1„BSR„ASCBINCONVERTASCIITOBINARYŠTST.L‚D0‘ZEROISILLEGALINPUT ŠBEQ.S‚DOPBAD1ŠSUB.L‚#1,D0ŽCORRECTLINENUMBERTORECORDNUMBER9ŠMOVE.LD0,SRTREC-B(A6)„DEPOSITINSTARTINGRECORDNUMBERŠCMP.B‚#',',0(A1,D2.L)ŠBEQ.S‚COMMAOK0ŠCMP.L‚DOPCNT-B(A6),D2ŠWASTHATALLONTHELINE?ŠBNE.S‚DOPBADCOMPLAINIFNOTŠMOVE.LD0,ENDREC-B(A6) ŠBRA.S‚LISTIT COMMAOKƒEQU„* ŠADD.L‚#1,D2 ŠBSR„ASCBIN ŠTST.L‚D0!ŠBEQ.S‚DOPBADBRANCHONBADINPUT*ŠSUB.L‚#1,D0ŽACCOUNTFORRECORD0=LINE1ŠMOVE.LD0,ENDREC-B(A6)** FINALLY, DO THE LISTING* LISTIT„EQU„* ŠBSR.S‚LISTS DOPEXITƒRTS* LISTS…EQU„*"ŠCLR.W‚LISTED-B(A6)‡FLAGASLISTED.ŠMOVE.LSRTREC-B(A6),D0ŠSTARTINGRECORDNUMBER,ŠMOVE.LENDREC-B(A6),D1ŠENDINGRECORDNUMBERLISTSL„CMP.L‚D1,D0&ŠBGT.S‚LISTEJCŒGETOUTIFDONELISTINGŠBSR.S‚INRECŽINPUTRECORDŠBRA.S‚LISTSEXT‹BRANCHIFERRORŠBSR„OUTRECOUTPUTRECORDŠBRA.S‚LISTSEXT‹BRANCHIFERRORŠADD.L‚#1,D0ŽGOFORNEXTRECORD ŠBRA.S‚LISTSLALISTEJCƒMOVE.LROWCNT-B(A6),LCNT-B(A6)‚FORCEPAGEEJECTNEXTTIMEŠADD.L‚#1,LCNT-B(A6) LISTSEXT‚RTS* * READS INPUT RECORD INTO RECBUF* RETURNS TO PC+2 IF NO ERROR *ŒPCIFERROR* INREC…EQU„*ŠMOVEM.LD0-D1,-(A7)ŠSUB.L‚RECADJ-B(A6),D0/ŠBPL.S‚INREC3BRANCHIFRECORDNUMBEROKSOFAR:* REC # NEGATIVE - GO BACK TO BEGINNING OF INPUT FILE LIST,ŠADD.L‚RECADJ-B(A6),D0ŠCORRECTRECORDNUMBER"ŠBSR„FREEFILŒFREETHECURRENTFILE5ŠCLR.L‚RECADJ-B(A6)‡ZEROBIASRECORDADJUSTMENTVALUE&ŠBSR„NEWIN1BASETOFIRSTFILEINLIST+ŠMOVEM.L(A7)+,D0-D1‡RESTOREOLDREGVALUESŠBRA.S‚INRECŽTRYAGAIN=* REC # POSITIVE - TRY TO ACCESS RECORD IN CURRENT INPUT FILE9INREC3„MOVE.LD0,INPIOS+IOSRRN-B(A6)RANDOMRECORDNUMBERŠLEA„INPIOS(PC),A0ŠTRAPƒ#2‘DOTHEINPUT ŠBEQ„INRECXOK‹BRANCHIFI/OGOOD&ŠCMP.B‚#ISTAEOF,D0ˆWASITENDOFFILE?ŠBNE.S‚NOTEOFBRANCHIFNOI* RECORD NUMBER TOO LARGE FOR THIS FILE - TRY NEXT INPUT FILE IF POSSIBLE>ŠBTSTW‚#0,EDITRTN+2-B(A6)ISTHEREANOTHERFILEONINPUTLINE?ŠBNE.S‚MOREINBRANCHIFYESŠBSR„EJECTPGŒNO-EJECTPAGE--,ŠBRA .S‚INRECX--ANDGETOUTOFTHISROUTINEIMOREIN„MOVE.W#IOPOST,INPIOS+IOSFCT-B(A6)CALCULATETHELASTLEGALRECORD7ŠMOVE.L#-1,INPIOS+IOSRRN-B(A6)POSITIONTOENDOFFILEŠLEA„INPIOS(PC),A0ŠTRAPƒ#2!ŠBEQ.S‚MOREIN4ŒBRANCHIFNOERROR.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN ŠBRA„LISTERR9MOREIN4ƒMOVE.LINPIOS+IOSRRN-B(A6),D0ƒLASTRECORDOFFILE(ŠADD.L‚#1,D0ŽBUMPFORONERELATIVECOUNT2ŠADD.L‚D0,RECADJ-B(A6)„SETRECORDADJUSTMENTVALUE9ŠMOVE.W#IOREAD,INPIOS+IOSFCT-B(A6)RESTOREREADFUNCTION$ŠBSR.S‚FREEFILŒFREETHECURRENTFILE>ŠMOVE.LEDITSVA0-B(A6),A0ˆRESTOREPOINTERTOINPUTOFCOMLINE!ŠBSR„NEWIN2ASSIGNNEWINPUTFILE?ŠCMP.B‚#1,HOPT+OPTFL-B(A6)WASHEADINGSPECIFIEDINTERACTIVELY?ŠBEQ.S‚MOREXTBRANCHIFNO2ŠBSR„DEFHDGADJUSTHEADINGFORNEWINPUTFILENAME5MOREXT„MOVEM.L(A7)+,D0-D1‡RESTOREORIGINALREGISTERS&ŠBRA„INRECŽGOTRYAGAINFROMBEGINNING* ERROR WAS NOT EOF NOTEOF„EQU„*&ŠCMP.B‚#ISTABRK,D0ˆWASABREAKENTERED+ŠBEQ.S‚INRECXBRANCHIFABREAKWASENTERED.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN,ŠBTSTƒ#0,SAVD7+3-B(A6)ƒAREWEINCHAINMODE?ŠBEQ„LISTERRŒBRANCHIFYES/ŠMOVE.L#$FF,LCNT-B(A6)„FORCEADVANCENEXTTIME ŠBRA.S‚INRECX+INRECXOK‚ADD.L‚#2,8(A7)‹GOODRETURNTOPC+2,INRECX„MOVEM.L(A7)+,D0-D1‡RESTOREREGISTERSŠRTS%*************************************!* SUBROUTINE TO FREE CURRENT FILE*:FREEFILƒMOVE.W#FHCLOS,INPFHS+FHSCMD-B(A6)CLOSEFILECODEŠLEA„INPFHS(PC),A0ŠTRAPƒ#37ŠMOVE.W#FHASGN,INPFHS+FHSCMD-B(A6)RESTOREASSIGNCODEŠRTS*"* DISPLAYS RECORD ON OUTPUT DEVICE* OUTREC„EQU„*ŠMOVEM.LD0-D1,-(A7))ŠMOVE.LLNUM-B(A6),D0ŒDISPLAYLINENUMBERŠCMP.L‚#999999,D0ŠBLS.S‚OUTREC1ŠMOVE.L#999999,D0:ŠMOVE.LD0,LNUM-B(A6)†INSURELINENUMBERNOTOVER6DIGITS2OUTREC1ƒLEA„LNOUT1(PC),A0ŠWHERETOPUTLINENUMBER,ŠMOVE.L#6,D1ŽNUMBEROFCHARACTERSINOUTPUT2ŠBSR„BINDECFJ‹CONVERTRECORDNUMBERTOLINENUMBER* PUT OUT HEADING IF REQUIREDŠMOVE.LLCNT-B(A6),D0ŠCMP.L‚ROWCNT-B(A6),D0$ŠBLE.S‚HDGDUNBRANCHIFHEADINGDONEŠBSR.S‚HDGOUTPUTOUTHEADING)* COMPUTE BUFFER START ADDRESS AND LENGTH9HDGDUN„LEA„LNOUT1(PC),A1ŠADDRESSIFLINENUMBERSINCLUDED,ŠTST.W‚LNUMF-B(A6)ˆARELINENUMBERSREQUIREDŠBEQ.S‚ADOKBRANCHIFYES&ŠLEA„LNOUT2(PC),A1ŠBYPASSLINENUMBERS)ADOK†MOVE.LINPIOS+IOSLEN-B(A6),D1ƒLENGTHŠLEA„LNOUT2-1(PC),A0ŠADD.L‚A0,D1ŽENDINGADDRESSŠSUB.L‚A1,D1ŽLENGTHŠCMP.L‚COLCNT-B(A6),D1 ŠBLT.S‚COKŠMOVE.LCOLCNT-B(A6),D1 ŠSUB.L‚#1,D1COK‡EQU„*’LENGTHISNOWIND1 ŠADD.L‚A1,D1 ŠMOVE.LA1,A0 ŠMOVE.LD1,A1 ŠBSR„LSTOUTFŠADD.L‚#1,LCNT-B(A6)-ŠADD.L‚#1,LNUM-B(A6)†BUMPDISPLAYLINENUMBER(ŠADD.L‚#2,8(A7)‹BUMPRETURNFORGOODI/OŠMOVEM.L(A7)+,D0-D1ŠRTS** PUT OUT HEADING* HDGOUT„EQU„*ŠMOVEM.LD0-D1,-(A7)%ŠMOVE.L#4,LCNT-B(A6)†LINECOUNTOF4 * OUTPUT FORM FEED IN IMAGE MODE ŠBSR„EJECTPGŠADD.L‚#1,PNUM-B(A6)ŠMOVE.LPNUM-B(A6),D0:ŠLEA„ASCIIPG(PC),A0‰WHERETODEPOSITCONVERTEDPAGENUMBER,ŠMOVE.L#4,D1ŽNUMBEROFCHARACTERSINOUTPUT ŠBSR„BINDECFJŠMOVE.LHDGEND-B(A6),D1ŠLEA„HLINE(PC),A0 ŠSUB.L‚A0,D1ŠCMP.L‚COLCNT-B(A6),D1 ŠBLT.S‚HCOKŠMOVE.LCOLCNT-B(A6),D1 ŠSUB.L‚#1,D1 HCOK†EQU„*ŠLEA„HLINE(PC),A0‹STARTADDRESS ŠMOVE.LA0,A1%ŠADD.L‚D1,A1ŽENDINGADDRESSTOOUTPUT ŠBSR„LSTOUTF+ŠLEA„DSOUTS(PC),A0ŠPUTOUTDOUBLELINEFEEDŠLEA„DSOUTE(PC),A1 ŠBSR„LSTOUTI%ŠSUB.L‚D0,D0ŽSEGGOODCONDITIONCODESŠMOVEM.L(A7)+,D0-D1ŠRTSŠPAGE%*************************************)* 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ŠRTS*&*ˆ**CONVERTBINARYTOASCIIROUTINE**-*********************************************$*ˆBINARYTODECIMALASCIISUBROUTINE*REV1.00‚3/27.79GAT***16BITBINARYINPUT**4****************************************************6*ˆCONVERTSBINARYQUANTITYIND0TOASCIISTRINGWHICH *ˆISDEPOSITEDATLOCATION(A0)+* *ˆCALLINGSEQUENCE:'*‹LOADD0WITHQUANTITYTOBECONVERTED.*‹LOADA0WITHADDRESSTODEPOSITASCIISTRING *‹JSRBINDEC*!*ˆREGISTERSUSED:01234567*“D„** *“A„*****ˆA1POINTSATBINARYTABLE*ˆA2POINTSATASCIITABLE*ˆD1ISWORKREGISTER*BINEQS„DC.Wƒ0,1,10,100,1000(BINASC„DC.Bƒ'0123456789ABCDEF'HEXTABLE*'BINDEC„LEA„BINEQS+8-B(A6),A1‚ADDR10**5,BINDE1„LEA„BINASC-B(A6),A2„BASEADDRASCII0#BINDE2„SUB.W‚(A1),D0ŒSUBTRACT10**NŠBCS.S‚BINDE3BRANCHOVERBORROW&ŠADD.L‚#1,A2ŽINCREMENTNEXTASCIICHARŠBRA„BINDE2CONTINUE'BINDE3„ADD.W‚(A1),D0ŒRESTOREOVERBORROW!ŠMOVE.B(A2),(A0)+‰PUTASCIICHARŠMOVE.W-(A1),D1‹TESTDONEŠBNE„BINDE1BRANCHNOTDONEŠRTS*-*********************************************+*‚32BITBINARYTODECIMALASCIISUBROUTINE-**********************************************,*‚CONVERTSBINARYIND0ANDPUTSASCIIDIGIT(*…CHARACTERSATADDRESSSPECIFIEDINA0.(*…LEADINGZEROSARECONVERTEDTOSPACES.+*…THEFIELDLENGTH(NO.CHARS)ISSPECIFIED *…IND1INTHECALLINGSEQUENCE.**‚CALLINGSEQUENCE:!*…MOVE.L,D0*…MOVE.L,D11*…MOVE.L,A0*…BSRBINDECFJ* *‚RETURNS:*…D0=0=>GOODCONVERSION**‚REGSUSED:‚01234567 *ŠDƒ*PP*ŠAƒPP*7TENS†DC.Lƒ10000000,1000000,100000,10000,1000,100,10,1,0*"BINDECFJ‚MOVEM.LD1/D2/A0/A1,-(A7)ŠMOVE.L#8,D2ŽMAXNO.DIGITSŠSUB.L‚D1,D2ŽNO.DIGITSTOSKIP!ŠBMI.S‚BINDECF5‹BRANCHERROREXITŠLSL.L‚#2,D2ŽDOUBLEWORDLENGTH!ŠLEA„TENS-B(A6),A1†STARTOFTABLE"ŠADD.L‚D2,A1ŽADJUSTFORDIFFERENCE&ŠMOVE.W#'‚',D2‹INITIALIZEACCUMULATOR%BINDECF1‚SUB.L‚(A1),D0ŒSUBTRACT10**NŠBCS.S‚BINDECF2‹BRANCHTOOBIG*ŠADD.W‚#1,D2ŽINCREMENTCURRENTDIGITCOUNTŠBRA„BINDECF1‹CONTINUE)BINDECF2‚ADD.L‚(A1)+,D0‹RESTORE,ADVPNTRŠTST.L‚(A1)TESTDONEŠBEQ.S‚BINDECF4‹BRANCHDONE ŠCMP.W‚#'‚',D2‹LEADINGZEROTEST!ŠBEQ.S‚BINDECF3‹BRANCHSTILLZERO#ŠADD.B‚#$10,D2ŒBRINGTOASCIIDIGIT%BINDECF3‚MOVE.BD2,(A0)+‹DEPOSITCHARŠLSL„#8,D2ŽSAVECHARDEPOSITED#ŠMOVE.B#$20,D2ŒRESTORELSTOSPACEŠBRA„BINDECF1‹CONTINUE4BINDECF4‚ADD.B‚#$10,D2ŒLASTONEBECOMESDIGITALWAYS"ŠMOVE.BD2,(A0)+‹DEPOSITLASTCHAR'ŠTST.L‚D0‘SETCONDITIONCODE,0IFGOOD"BINDECF5‚MOVEM.L(A7)+,D1/D2/A0/A1ŠRTS*ŠPAGE%************************************** * SUBROUTINE FOR DATE CONVERSION***ˆNON-LEAPDAYSBEFORETABLE*' MEND3…EQU„*-1*!MSG4†DC.Wƒ'ENTERTASKPRIORITY>$' MEND4…EQU„*-1*$MSG5†DC.Wƒ'ENTERTASKATTRIBUTES>$' MEND5…EQU„*-1*%MSG6†DC.Wƒ'ENTERTASKENTRYPOINT>$' MEND6…EQU„*-1*!MSG7†DC.Wƒ'ENTERTASKOPTIONS>$' MEND7…EQU„*-1*!MSG11…DC.Wƒ'ENTERSEGMENTNAME>'MEND11„EQU„*-1*(MSG12…DC.Wƒ'ENTERSEGMENTATTRIBUTES>$'MEND12„EQU„*-1*-MSG13…DC.Wƒ'ENTERSEGMENTLOGICALADDRESS>$'MEND13„EQU„*-1*$MSG14…DC.Wƒ'ENTERSEGMENTLENGTH>$'MEND14„EQU„*-1**MSG15…DC.Wƒ'ENTERCOMMANDLINEADDRESS>$'MEND15„EQU„*-1*)MSG16…DC.Wƒ'ENTERCOMMANDLINELENGTH>$'MEND16„EQU„*-1*!MSG19…DC.Wƒ'ENTERTASKSESSION>'MEND19„EQU„*-1*"MSG21…DC.Wƒ'**THATSALLFOLKS**'MEND21„EQU„*-1*/MSG22…DC.Wƒ'**ERROR**DUPLICATEFILENAME**'MEND22„EQU„*-1*MSG23…DC.Wƒ'REUSEFILE(Y/N)>'MEND23„EQU„*-1*&MSG24…DC.Wƒ'**FILEHANDLINGERROR**'MEND24„EQU„*-1*%MSG25…DC.Wƒ'**INPUT/OUTPUTERROR**'MEND25„EQU„*-1*%MSG26…DC.Wƒ'**COMMANDLINEERROR**'MEND26„EQU„*-1* MSG27…DC.Wƒ'**BUFFERERROR**'MEND27„EQU„*-1*!MSG28…DC.Wƒ'**S-RECORDERROR**'MEND28„EQU„*-1*7******************************************************* ŠPAGE *** PARAMETER BLOCKS** OUTPUT FILE BLOCK*,FBLK1…DC.WƒFHALLO+FHASGN†ALLOCATEANDASSIGN8ŠDC.WƒFOPEREW+FOPCON+FOPOVRTEXCLUSIVEW/R,CONGIGUOUSFŠDC.Bƒ0’STATUS ŠDC.Bƒ7’LUNŠDC.Bƒ'„'VOLUMENAMEŠDC.Wƒ-1‘USERNUMBERŠDC.Bƒ'ˆ'‰CATALOGŠDC.Lƒ0,0FILENAMEŠDC.Wƒ0’EXTENSIONŠDC.Wƒ0’RESERVEDŠDC.Bƒ0,0W/RCODEŠDC.Wƒ0’RECORDLENGTHŠDC.Lƒ0’FILESIZE** INPUT FILE BLOCK*%FBLK2…DC.WƒFHASGNALLOCATEANDASSIGNŠDC.WƒFOPPRPWŒPUBICREAD/WRITEŠDC.Bƒ0’STATUS ŠDC.Bƒ1’LUNŠDC.Bƒ'„'VOLUMENAMEŠDC.Wƒ-1‘USERNUMBERŠDC.Bƒ'ˆ'‰CATALOGŠDC.Lƒ0,0FILENAMEŠDC.Wƒ0’EXTENSIONŠDC.Wƒ0’RESERVEDŠDC.Bƒ0,0W/RCODEŠDC.Wƒ0’RECORDLENGTHŠDC.Lƒ0’FILESIZE** OUTPUT I/O BLOCK*IBLK1…DC.WƒIOWRITWRITE ŠDC.WƒIOPWAT+IOPRAN†WAIT,RANDOMŠDC.Bƒ0’STATUS ŠDC.Bƒ7’LUNŠDC.Wƒ0’RESERVED ŠDC.Lƒ0’RRNŠDC.Lƒ0’STARTBUFFERADDRESSŠDC.Lƒ0’ENDBUFFERADDRESSŠDC.Lƒ0’XFERLENGTHŠDC.Lƒ0’COMPLETIONADDRESS** CONSOLE I/O BLOCK*IBLK2…DC.Wƒ0’COMMANDŠDC.Wƒ0’OPTIONSŠDC.Bƒ0’STATUS ŠDC.Bƒ0’LUNŠDC.Wƒ0’RESERVED ŠDC.Lƒ0’RRNŠDC.Lƒ0’STARTBUFFERADDRESSŠDC.Lƒ0’ENDBUFFERADDRESSŠDC.Lƒ0’XFERLENGTHŠDC.Lƒ0’COMPLETIONADDRESS** ALLOCATE SEGMENT BLOCK*SEGBLK„DC.Lƒ0’TASKŠDC.Lƒ0’SESSIONŠDC.Wƒ$2000ŽOPTIONSŠDC.Wƒ0’ATTRIBUTESŠDC.Lƒ'BLMO'SEGMENTNAMEŠDC.Lƒ0’LOGICALADDRESSSEGSIZ„DC.Lƒ0’LENGTHŠDC.Lƒ0’POINTERSEGLEN„EQU„SEGSIZ-SEGBLK SEGNAM„EQU„$C** INPUT I/O BLOCK*IBLK3…DC.WƒIOREADŒREAD+ŠDC.WƒIOPWAT+IOPNXT+IOPBLKWAIT,SEQUENTIALŠDC.Bƒ0’STATUS ŠDC.Bƒ1’LUNŠDC.Wƒ0’RESERVED%ŠDC.Lƒ0’RRN(USEDFORRECORDPOINTER)ŠDC.Lƒ0’STARTBUFFERADDRESSŠDC.Lƒ0’ENDBUFFERADDRESSŠDC.Lƒ0’XFERLENGTHŠDC.Lƒ0’COMPLETIONADDRESS*ŠPAGE* * BUFFERS*(CMDBUF„COMLINECMDLENCOMMANDLINEINPUT*PARSTATƒDC.Lƒ0’PARSESTATUS**$CATBUF„DC.Lƒ0,0DEFAULTCATALOGNAME**#CONBUF„DS.Bƒ80‘CONSOLEINPUTBUFFER**‚***‚11/19/84F*‚ThecalltoSBARGrequirestheinputbuffertobe1characterlonger*‚thanspecified.*ŠDS.Bƒ4’AddedforSBARG.**#DSKBUF„DC.Lƒ0,0,0,0,0,0ˆDISKBUFFERŠDC.Lƒ0,0,0,0,0,0 ŠDS.Bƒ208**MSG20…DC.Bƒ'LUN='LUNV†DC.Bƒ'„STATUS=$'STATV…DC.Wƒ'‚'MEND20„EQU„*-1** ŠDS.Bƒ$80STACK…EQU„*’STACKAREA***TAG0†LEA„STACK(PC),A7‹SETUPSTACKPOINTER * ŠLEA„B(PC),A5ŠMOVE.LD4,CATBUF-B(A5)ŠMOVE.LD5,CATBUF+4-B(A5)TAG10…LEA„MSG1(PC),A5ŠLEA„MEND1(PC),A6ŠCLR.L‚D0‘OPTIONFORMATTEDŠBSR„OUTPUTINTRODUCEOURSELVES!ŠLEA„CMDBUF(PC),A0ŠBUFFERPOINTER ŠBSR„PARSE ŠLEA„B(PC),A5*ŠMOVE.LD0,PAR STAT-B(A5)ƒSAVEPARSESTATUSŠBTSTƒ#ERBIT,D0ŠCMDLINEERROR?ŠBNE„CMDERRYESŠBTSTƒ#INNULL,D0‰INPUTNULL?ŠBNE„CMDERRYES,ERROR!ŠLEA„CMDBUF(PC),A0ŠBUFFERPOINTER#TAG12…LEA„FBLK2(PC),A6‹FHCBPOINTER)ŠMOVE.L#'„',FHSVOL(A6)BLANKVOLUMENAME.ŠMOVE.W#-1,FHSUSN(A6)…SETUPDEFAULTUSERNO.6ŠMOVE.LCATBUF-B(A5),FHSCLG(A6)‚SETUPDEFAULTCATALOG#ŠMOVE.LCATBUF+4-B(A5),FHSCLG+4(A6)ŠBSR„EDITFILE‹FORMATFILENAME ŠLEA„B(PC),A5ŠBTSTƒ#ERBIT,D0ŠTESTRETURNŠBEQ.S‚TAG14ŽOKŠBSR„FHSERRERROR ŠBRA„ENDIT&TAG14…MOVE.LA0,A6ŽSAVEBUFFERPOINTER"ŠMOVE.LD0,D6ŽSAVEEDITFILESTATUSŠLEA„FBLK2(PC),A0ŠTRAPƒ#FHSTINŒASSIGNFILEŠBEQ.S‚TAG15ŽOKŠBSR„FHSERRERROR ŠBRA„ENDIT,TAG15…MOVE.WFHSOPT(A0),D1†PICKUPFILETYPE"ŠAND.W‚#FOPSEQ,D1‰SEQUENTIALFILE?ŠBNE.S‚TAG15AYESŠMOVE.L#FSTAFT,D0‰NO,ERROR ŠBSR„FHSERR ŠBRA„ENDITTAG15A„CLR.L‚D1(ŠMOVE.BFHSDAT(A0),D1†PICKUPBLOCKSIZE!ŠMULSƒ#256,D1ŒCALC.SIZEINBYTES+ŠCMP.L‚SEGSIZ-B(A5),D1ŠFINDTHEBIGGESTONE ŠBLT.S‚TAG15B)ŠMOVE.LD1,SEGSIZ-B(A5)„THISONE'SBIGGER9TAG15B„CMP.B‚#LUNMAX,FHSLUN(A0)REACHEDMAX.INPUTFILES?ŠBEQ.S‚TAG16ŽYES#ŠBTSTƒ#CONTFILE,D6‡MOREINUTFILES?ŠBEQ.S‚TAG16ŽNO$ŠMOVE.LA6,A0ŽRESTOREBUFFERPOINTERŠLEA„FBLK2(PC),A1ŠADD.B‚#1,FHSLUN(A1)†BUMPLUNŠBRA„TAG12ŽCONTINUE)TAG16…BTSTƒ#CONTFILE,D6‡MOREINPUTFILES?ŠBNE„CMDERRYES,ERRORŠMOVE.LPARSTAT-B(A5),D0#ŠBTSTƒ#OUTNULL,D0ˆOUTPUTSPECIFIED?ŠBEQ.S‚TAG18ŽYES8ŠLEA„FBLK2+FHSVOL-B(A5),A0„NO,DEFAULTTOINPUTFILENAMEŠMOVEM.L(A0),D0-D5ŠLEA„FBLK1+FHSVOL-B(A5),A0ŠMOVEM.LD0-D5,(A0) ŠLEA„B(PC),A56ŠMOVE.W#'LO',FBLK1+FHSEXT-B(A5)SETEXTENSIONTO'LO' ŠBRA.S‚TAG19A(TAG18…MOVE.LA6,A0ŽRESTORBUFFERPOINTERŠLEA„FBLK1(PC),A63ŠMOVE.LCATBUF-B(A5),FHSCLG(A6)‚SETDEFAULTCATALOG#ŠMOVE.LCATBUF+4-B(A5),FHSCLG+4(A6)ŠBSR„EDITFILE‹FORMATFILENAMEŠBTSTƒ#ERBIT,D0ŠTESTRETURNŠBNE.S‚TAG19ŽERROR)ŠBTSTƒ#CONTFILE,D0‡MORETHATNONEOUTPUT?ŠBEQ.S‚TAG19ANOTAG19…BSR„FHSERRERROR ŠBRA„ENDITTAG19A„ERQ.GTSEGSEGBLK(PC)ŠBNE„BUFERRERROR ŠLEA„B(PC),A5,ŠMOVE.LA0,IBLK3+IOSSAD-B(A5)SETUPADDRESSŠADD.L‚SEGSIZ-B(A5),A0 ŠSUB.L‚#1,A0ŠMOVE.LA0,IBLK3+IOSEAD-B(A5)6ŠMOVE.B#'1',SEGBLK+SEGNAM+3-B(A5)CHANGESEGMENTNAME*** GET TASK INFO**TAG20…LEA„DSKBUF(PC),A0#TAG21…CLR.L‚(A0)+ŽCLEARDISKBUFFERŠLEA„DSKBUF+$100(PC),A5ŠCMP.L‚A5,A0ŽFINISHED?ŠBNE.S‚TAG21ŽNOŠLEA„DSKBUF(PC),A3TAG21A„LEA„MSG3(PC),A5ŠLEA„MEND3(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGEŠBSR„OUTPUTASKFORTASKNAMEŠBSR„INPUTŽREADINPUTŠTST.L‚IOSLEN(A0)‰ANYINPUT?ŠBEQ.S‚TAG21ANO,ERROR'ŠMOVE.L(A4),LDTSK(A3)…SETUPTASKNAMETAG22…LEA„MSG19(PC),A5ŠLEA„MEND19(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE ŠBSR„OUTPUTASKFORTASKSESSIONŠBSR„INPUTŽREADINPUT ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG23ŽNO,LEAVEITZEROŠBSR„CH2BCONVERTTOBINARYŠBRA.S‚TAG23ŽNOTANUMBER,ŠMOVE.LD0,LDSES(A3)‡SETUPASESSIONNUMBER ŠBRA.S‚TAG251TAG23…MOVE.L(A4),LDSES(A3)…SETUPSESSIONCHARS.TAG25…LEA„MSG4(PC),A5ŠLEA„MEND4(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGEŠBSR„OUTPUTASKFORPRIORITYŠBSR„INPUTŽREADINPUTŠCLR.L‚LDIPR(A3)ŠINIT.PRIORITY ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG30ŽNO,LEAVEITZEROŠBSR„CH2BCONVERTTOBINARYŠBRA.S‚TAG25ŽERRORRETURN *£GOODRETURNŠMOVE.BD0,LDIPR(A3)ŠMOVE.BD0,LDLPR(A3)TAG30…LEA„MSG5(PC),A5ŠLEA„MEND5(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE#ŠBSR„OUTPUTASKFORTASKATTRIBUTESŠBSR„INPUTŽREADINPUT!ŠCLR.W‚LDATR(A3)ŠINIT.ATTRIBUTES ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG32ŽNOŠBSR„CH2BCONVERTHEXTOBINARYŠBRA.S‚TAG30ŽERRORRETURN *£GOODRETURN+ŠMOVE.WD0,LDATR(A3)‡SETUPTASKATTRIBUTESTAG32…LEA„MSG7(PC),A5ŠLEA„MEND7(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE ŠBSR„OUTPUTASKFORTASKOPTIONSŠBSR„INPUTŽREADINPUTŠCLR.W‚LDOPT(A3)ŠINIT.OPTIONS ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG35ŽNOŠBSR„CH2BCONVERTHEXTOBINARYŠBRA.S‚TAG32ŽERRORRETURN *£GOODRETURN(ŠMOVE.WD0,LDOPT(A3)‡SETUPTASKOPTIONSTAG35…LEA„MSG6(PC),A5ŠL EA„MEND6(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGEŠBSR„OUTPUTASKFORENTRYPOINTŠBSR„INPUTŽREADINPUT ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG35ŽNOŠBSR„CH2BCONVERTHEXTOBINARYŠBRA.S‚TAG35ŽERRORRETURN *£GOODRETURN'ŠMOVE.LD0,LDENT(A3)‡SETUPENTRYPOINTTAG40…LEA„MSG15(PC),A5ŠLEA„MEND15(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE(ŠBSR„OUTPUTASKFORCOMMANDLINEADDRESSŠBSR„INPUTŽREADINPUTŠMOVE.L#-1,LDCMD(A3) ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG45ŽNOŠBSR„CH2BCONVERTHEXTOBINARYŠBRA.S‚TAG40ŽERRORRETURN *£GOODRETURN0ŠMOVE.LD0,LDCMD(A3)‡SETUPCOMMANDLINEADDRESSTAG45…LEA„MSG16(PC),A5ŠLEA„MEND16(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE'ŠBSR„OUTPUTASKFORCOMMANDLINELENGTHŠBSR„INPUTŽREADINPUTŠCLR.B‚LDCLN(A3) ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG70ŽNOŠBSR„CH2BCONVERTHEXTOBINARYŠBRA.S‚TAG45ŽERRORRETURN *£GOODRETURN"ŠMOVE.BD0,LDCLN(A3)‡SETUPLENGTH*** GET SEGMENT INFO**"TAG70…ADD.L‚#LDSEG,A3ŠBUMPPOINTERTAG71…LEA„MSG11(PC),A5ŠLEA„MEND11(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE%ŠBSR„OUTPUTASKFORDATASEGMENTNAMEŠBSR„INPUTŽREADINPUT ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ„TAG100NO,FINISHEDINPUTŠMOVE.L(A4),LDNAM(A3)ŠCMP.B‚#'/',(A4) ŠBEQ.S‚TAG100TAG75…LEA„MSG12(PC),A5ŠLEA„MEND12(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE+ŠBSR„OUTPUTASKFORDATASEGMENTATTRIBUTESŠBSR„INPUTŽREADINPUTŠCLR.W‚LDSAT(A3) ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG80ŽNOŠBSR„CH2BCONVERTHEXTOBINARYŠBRA.S‚TAG75ŽERRORRETURN *£GOODRETURN.ŠMOVE.WD0,LDSAT(A3)‡SETUPSEGMENTATTRIBURESTAG80…LEA„MSG13(PC),A5ŠLEA„MEND13(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE0ŠBSR„OUTPUTASKFORDATASEGMENTLOGICALADDRESSŠBSR„INPUTŽREADINPUT ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG80ŽNOŠBSR„CH2BCONVERTHEXTOBINARYŠBRA.S‚TAG80ŽERRORRETURN *£GOODRETURN)ŠMOVE.LD0,LDSAD(A3)‡SETUPSTARTADDRESSTAG90…LEA„MSG14(PC),A5ŠLEA„MEND14(PC),A6ŠADD.B‚#1,D0ŽOPTIONIMAGE'ŠBSR„OUTPUTASKFORDATASEGMENTLENGTHŠBSR„INPUTŽREADINPUT ŠMOVE.LIOSLEN(A0),D0†ANYINPUT?ŠBEQ.S‚TAG90ŽNOŠBSR„CH2BCONVERTHEXTOBINARYŠBRA.S‚TAG90ŽERRORRETURN *£GOODRETURN"ŠMOVE.LD0,LDSLN(A3)‡SETUPLENGTHŠADD.L‚#LDLNG,A3ŠLEA„DSKBUF+SDESC(PC),A5ŠCMP.L‚A5,A3ŽENDOFSEGMENT?ŠBLT„TAG71ŽNO,CONTINUE*** GOT ALL THE INFO - BUILD THE LOAD MODULE*,TAG100„LEA„DSKBUF+LDSEG(PC),A5ANYSEGMENTS? ŠCMP.L‚A5,A3ŠBEQ„TAG71ŽNO,STARTOVER*ŠMOVE.L#-1,LDSLN(A3)†MARKENDOFSEGMENTSŠCLR.L‚LDSAD(A3)0ŠLEA„DSKBUF+LDSEG(PC),A2„SETUPSEGMENTSPOINTER ŠMOVE.L#1,D02ŠLEA„DSKBUF+SDESC(PC),A1„SETUPMEMORYDESCRIPTORS$TAG110„CMP.L‚#-1,LDSLN(A2)†FINISHED?ŠBEQ.S‚TAG120YES/ŠMOVE.WLDSAT(A2),D1‡PICKUPSEGMENTATTRIBUTESŠBSETƒ#15,D1SETUSEBIT/ŠMOVE.WD1,LDSAT(A2)‡RESTORESEGMENTATTRIBUTES+ŠMOVE.LLDSLN(A2),D1‡PICKUPSEGMENTLENGTH ŠDIVSƒ#256,D1ŒCALC.NO.OFPAGES ŠCLR.L‚D2 ŠMOVE.WD1,D2 ŠAND.L‚#$FFFF0000,D1†WHOLEPAGE?ŠBEQ.S‚TAG115YESŠADD.L‚#1,D2ŽNO,BUMPCOUNTTAG115„ADD.L‚D2,D0*ŠMOVE.LLDSAD(A2),D1‡PICKUPSTARTADDRESS ŠMOVE.L#8,D2 ŠASR.L‚D2,D1"ŠMOVE.WD1,0(A1)‹SETUPDESCRIPTORŠMOVE.LLDSAD(A2),D1%ŠADD.L‚LDSLN(A2),D1‡CALC.ENDADDRESS ŠSUB.L‚#1,D1 ŠASR.L‚D2,D1&ŠMOVE.WD1,2(A1)‹SETUPENDDESCRIPTOR$ŠADD.L‚#4,A1ŽBUMPDESCRIPTORPOINTER$ŠADD.L‚#LDLNG,A2ŠBUMPBUFFERPOINTER ŠBRA.S‚TAG110** ALLOCATE THE FILE**TAG120„CLR.W‚0(A1)ŽFLAGENDOFDESCRIPTORSŠMOVE.W#-1,2(A1)ŠLEA„FBLK1(PC),A0&ŠMOVE.LD0,FHSSIZ(A0)†SETUPFILESIZE,TAG122„TRAPƒ#FHSTINŒALLOCATEANDASSIGNFILEŠBNE„ALOERRSOMETHINGWRONGŠLEA„IBLK1(PC),A0ŠLEA„DSKBUF(PC),A5"ŠMOVE.LA5,IOSSAD(A0)†SETUPSTARTŠADDA.L#255,A5/ŠMOVE.LA5,IOSEAD(A0)†SETUPENDBUFFERADDRESSŠTRAPƒ#IOSTINŒOUTPUTLIBBLOCKŠBNE„IOSERRSOMETHINGWRONGŠADD.L‚#1,IOSRRN(A0)†BUMPRRN*** GET DATA SEGMENT FOR SEGMENT IMAGE BUILD*ŠLEA„DSKBUF+LDSEG(PC),A1 ŠCLR.L‚D1+TAG123„CMP.L‚LDSLN(A1),D1‡THISONEGREATER?ŠBGT.S‚TAG124NO"ŠMOVE.LLDSLN(A1),D1‡YES,STOREITTAG124„ADD.L‚#LDLNG,A1%ŠCMP.L‚# -1,LDSLN(A1)†ENDOFSEGMENTS?ŠBNE.S‚TAG123NO1ŠLEA„SEGBLK(PC),A0ŠSETPOINTERTOSEGMENTP-BLOCK#ŠMOVE.LD1,SEGLEN(A0)†SETUPLENGTHŠERQ.GTSEG(A0)ŠBNE„BUFERRERROR ŠMOVE.LA0,A3(ŠLEA„IBLK1(PC),A0‹SETUPPOINTERTOIOCB1ŠMOVE.LA3,IOSSAD(A0)†SETUPSTARTBUFFERADDRESSŠLEA„DSKBUF+LDSEG(PC),A1*"* READ S-RECORDS INTO DATA SEGMENT*5TAG124AƒMOVE.LLDSAD(A1),A6‡SETUPSTARTSEG.ADDRESS ŠMOVE.LA3,A0 ŠLEAB(PC),A54ŠMOVE.LSEGBLK+SEGLEN-B(A5),D1ƒSETUPSEGMENTLENGTH(TAG124BƒCLR.B‚(A0)+ŽCLEARSEGMENTBUFFERŠSUB.L‚#1,D1ŽFINISHED?ŠBNE„TAG124BŒNOTAG125„BSR„GETRECREADS-RECORDŠBEQ.S‚TAG127OK ŠLEA„B(PC),A5'ŠCMP.B‚#ISTAEOF,IBLK3+IOSSTA-B(A5)EOF?ŠBNE„IOSERRNO,ERRORŠMOVE.BIBLK3+IOSLUN-B(A5),D1,ŠCMP.B‚FBLK2+FHSLUN-B(A5),D1„READALLFILES?ŠBEQ.S‚TAG135YES ŠLEA„B(PC),A5%ŠADD.B‚#1,IBLK3+IOSLUN-B(A5)BUMPLUNŠBRA.S‚TAG125CONTINUETAG127„MOVE.LA0,D6**‚***‚11/19/84H*‚TheSUB.LA6,D6wasSUB.LA6,A6in4.3release.‚ThisfixwasaddedperL*‚SPR1107,sothatthisutilitycanconvertfilesofmorethanonesection.*4ŠSUB.L‚A6,D6ŽCALC.SEGMENTOFFSET‚***FIXED11/19/84+ŠBMI„TAG125LOWERADDRESS,NOTTHISSEGMENTŠCMP.L‚LDSLN(A1),D6ŠBGE„TAG125NOŠMOVE.LD0,D5ŽSAVEDATALENGTH ŠMOVE.LA3,A2TAG130„MOVE.L#2,D0ŽBYTELENGTH ŠBSR„CH2BCONVERTBYTETOBINARYŠBRA.S‚TAG133ERRORRETURN+ŠMOVE.BD0,0(A2,D6.L)†MOVE,BYTETOSEGMENT ŠADD.L‚#1,A2&ŠADD.L‚#2,A4ŽBUMPINPUTBUFFERPOINTERŠSUB.L‚#1,D5ŽENDOFRECORD?ŠBNE.S‚TAG130NO ŠBRA„TAG125TAG133„BRA„RECERRRECORDERROR** WRITE SEGMENT*+TAG135„LEA„IBLK1(PC),A0‹SETUPIOCBPOINTERŠMOVE.LIOSSAD(A0),IOSEAD(A0)ŠMOVE.LLDSLN(A1),D1 ŠDIVSƒ#256,D1 ŠCLR.L‚D2 ŠMOVE.WD1,D2(ŠAND.L‚#$FFFF0000,D1†ROUNDTOWHOLEPAGE ŠBEQ.S‚TAG140 ŠADD.L‚#1,D2TAG140„MOVE.LD2,D1$ŠMULSƒ#256,D2ŒCALC.SEGMENTINBYTES ŠSUB.L‚#1,D2+ŠADD.L‚D2,IOSEAD(A0)†SETENDBUFFERADDRESS$ŠTRAPƒ#IOSTINŒOUTPUTSEGMENTTOFILE ŠBNE„IOSERRŠADD.L‚D1,IOSRRN(A0)†BUMPRRN$ŠADD.L‚#LDLNG,A1ŠBUMPBUFFERPOINTER%ŠCMP.L‚#-1,LDSLN(A1)†ENDOFSEGMENTS?ŠBEQ.S‚ENDITŽYES#ŠBSR„REWINDNO,REWINDTHEFILES(S) ŠBRA„TAG124A**ABORTY„LEA„FBLK1(PC),A0ŠMOVE.W#FHDELT,FHSCMD(A0)$ŠTRAPƒ#FHSTINŒDELETETHEOUTPUTFILE**ENDIT…LEA„MSG21(PC),A5ŠLEA„MEND21(PC),A6ŠCLR.L‚D0‘OPTIONFORMATTEDŠBSR„OUTPUTSAYEND ŠERQ.TERM**FHSERR„LEA„MSG24(PC),A5ŠLEA„MEND24(PC),A6ŠMOVE.LD0,D6ŽSAVESTATUSŠMOVE.LA0,A3ŽSAVEFHCBPOINTER ŠCLR.L‚D0ŠBSR„OUTPUTOUTPUTFHSERRORŠLEA„LUNV(PC),A51ŠMOVE.W#'‚',(A5)‰PRIMDESTINATIONFORCONVERSIONŠLEA„STATV(PC),A5ŠMOVE.W#'‚',(A5)"ŠAND.L‚#$FF,D6ŒISOLATESTATUSCODE,ŠLEA„STATV(PC),A4‹SETUPDESTINATIONPOINTERŠBSR„CB2HCONVERTTOHEX!ŠMOVE.BFHSLUN(A3),D6†PICKUPLUN#ŠLEA„LUNV(PC),A4ŒSETUPDESTINATIONŠBSR„CB2HCONVERTTOHEXŠLEA„MSG20(PC),A5ŠLEA„MEND20(PC),A6 ŠCLR.L‚D0)ŠBSR„OUTPUTOUTPUTLUNANDSTATUSMESSAGE ŠRTS„RETURN**IOSERR„LEA„MSG25(PC),A5ŠLEA„MEND25(PC),A6ŠMOVE.LD0,D6ŽSAVESTATUSŠMOVE.LA0,A3ŽSAVEIOCBPOINTER ŠCLR.L‚D0ŠBSR„OUTPUTOUTPUTIOSERRORŠLEA„LUNV(PC),A51ŠMOVE.W#'‚',(A5)‰PRIMDESTINATIONFORCONVERSIONŠLEA„STATV(PC),A5ŠMOVE.W#'‚',(A5)"ŠAND.L‚#$FF,D6ŒISOLATESTATUSCODE,ŠLEA„STATV(PC),A4‹SETUPDESTINATIONPOINTERŠBSR„CB2HCONVERTTOHEX!ŠMOVE.BIOSLUN(A3),D6†PICKUPLUN#ŠLEA„LUNV(PC),A4ŒSETUPDESTINATIONŠBSR„CB2HCONVERTTOHEXŠLEA„MSG20(PC),A5ŠLEA„MEND20(PC),A6 ŠCLR.L‚D0)ŠBSR„OUTPUTOUTPUTLUNANDSTATUSMESSAGE ŠBRA„ABORTY**BUFERR„LEA„MSG27(PC),A5ŠLEA„MEND27(PC),A6 ŠCLR.L‚D0ŠBSR„OUTPUTOUTPUTBUFFERERROR ŠBRA„ABORTY**RECERR„LEA„MSG28(PC),A5ŠLEA„MEND28(PC),A6 ŠCLR.L‚D0!ŠBSR„OUTPUTOUTPUTS-RECORDERROR ŠBRA„ABORTY**CMDERR„LEA„MSG26(PC),A5ŠLEA„MEND26(PC),A6 ŠCLR.L‚D0%ŠBSR„OUTPUTOUTPUTCOMMANDLINEERROR ŠBRA„ENDIT**-ALOERR„CMP.B‚#FSTADNM,D0ˆDUPLICATEFILENAME?ŠBEQ.S‚ALO05ŽYESŠBSR„FHSERRNO,ERROR ŠBRA„ABORTYALO05…LEA„MSG22(PC),A5ŠLEA„MEND22(PC),A6ŠCLR.L‚D0‘OPTI ONFORMATTED ŠBSR„OUTPUTTELLEM'FILEERROR'ŠLEA„MSG23(PC),A5ŠLEA„MEND23(PC),A6ALO10…ADD.B‚#1,D0ŽOPTIONIMAGE!ŠBSR.L‚OUTPUTASK'WANTTOREUSE'ŠBSR.S‚INPUTŽREADINPUTŠTST.L‚IOSLEN(A0)‰ANYINPUT?ŠBEQ.S‚ALO10ŽNOŠCMP.B‚#'Y',(A4)ŠREUSEFILE?ŠBNE„ENDITŽNO,ENDŠLEA„FBLK1(PC),A0"ŠMOVE.WFHSCMD(A0),D1†SAVECOMMANDŠMOVE.W#FHDELT,FHSCMD(A0)ŠTRAPƒ#FHSTINŒDELETETHEFILE ŠBEQ.S‚ALO20 ŠBSR„FHSERRERROR ŠBRA„ENDIT*ALO20…MOVE.WD1,FHSCMD(A0)†RESTORECOMMANDŠBRA„TAG122TRYAGAINŠPAGE**‰INPUTFROMCONSOLE***INPUT…LEA„CONBUF(PC),A5ŠCLEARBUFFERFIRST ŠMOVE.LA5,A6 ŠADD.L‚#80,A6INP10…CLR.L‚(A5)+ŠCMP.L‚A5,A6ŽFINISHED? ŠBNE„INP10ŽNOŠLEA„CONBUF(PC),A5ŠLEA„IBLK2(PC),A0*ŠMOVE.W#IOREAD,IOSFCT(A0)SETUPFUNCTION7ŠMOVE.W#IOPWAT+IOPFOR+IOPBRK,IOSOPT(A0)„SETUPOPTIONS%ŠMOVE.B#CDFLUN,IOSLUN(A0)SETUPLUN4ŠMOVE.LA5,IOSSAD(A0)†SETUPSTARTOFBUFFERADDRESS2ŠMOVE.LA6,IOSEAD(A0)†SETUPENDOFBUFFERADDRESSŠSUB.L‚#1,IOSEAD(A0)ŠTRAPƒ#IOSTINŒMAKEINPUTCALLŠBEQ.S‚INP20ŽSUCCESSFUL!"ŠCMP.B‚#ISTABRK,IOSSTA(A0)BREAK?ŠBEQ.S‚RETURNYES ŠBRA„IOSERR**‚***‚11/19/845*‚CalltoSBARGaddedforSPR1006,tomakeMBLMwork*‚correctlywithCHAINfiles.*.INP20…BSR„SBARGŽCALLFORARGUMENTSUBSTITUTION ŠBNE„IOSERRŠLEA„CONBUF(PC),A4 ŠRTS„RETURN**‰OUTPUTTOCONSOLE*OUTPUT„LEA„IBLK2(PC),A0*ŠMOVE.W#IOWRIT,IOSFCT(A0)SETUPFUNCTION7ŠMOVE.W#IOPWAT+IOPFOR+IOPBRK,IOSOPT(A0)‚SETUPOPTIONS%ŠMOVE.B#LDFLUN,IOSLUN(A0)SETUPLUNŠTST.L‚D0‘IMAGE?ŠBEQ.S‚OUT10ŽNO7ŠMOVE.W#IOPWAT+IOPIMG+IOPBRK,IOSOPT(A0)‚SETUPOPTIONS9OUT10…MOVE.LA5,IOSSAD(A0)†SETUPSTARTOFBUFFERADDRESS2ŠMOVE.LA6,IOSEAD(A0)†SETUPENDOFBUFFERADDRESSŠTRAPƒ#IOSTINŒMAKEOUTPUTCALLŠBEQ.S‚OUT20ŽSUCCESSFUL!"ŠCMP.B‚#ISTABRK,IOSSTA(A0)‚BREAK?ŠBEQ.S‚RETURNYESŠBRA„IOSERRRETURN OUT20…RTS***%RETURN„TST.L‚(A7)+ŽBUMPSTACKPOINTERŠBRA„ENDITŽENDŠPAGE**‰CONVERTHEXTOBINARY**‰ENTRY:A4=STARTBUFFER *D0=LENGTH**‰RETURN:D0=VALUE**'CH2B†MOVE.LA4,A0ŽSETUPBUFFERPOINTER ŠADD.L‚D0,A0 ŠSUB.L‚#1,A0 ŠCLR.L‚D0 ŠCLR.L‚D2CH2B4…CLR.L‚D1"ŠCMP.B‚#'0',(A0)ŠLESSTHANZERO??ŠBLT.S‚CH2B10YES,ERROR$ŠCMP.B‚#'9',(A0)ŠGREATERTHANNINE?ŠBGT.S‚CH2B6ŽYESŠMOVE.B(A0),D1ŠAND.B‚#$0F,D1ŒSTRIPZONE ŠBRA.S‚CH2B8#CH2B6…CMP.B‚#'A',(A0)ŠLESSTHANA?ŠBLT.S‚CH2B10YES,ERROR!ŠCMP.B‚#'F',(A0)ŠGREATERTHANF?ŠBGT.S‚CH2B10YES,ERRORŠMOVE.B(A0),D1ŠAND.B‚#$0F,D1ŒSTRIPZONEŠADD.B‚#9,D1ŽMAKEITBASE16CH2B8…ASL.L‚D2,D1ŠADD.L‚D1,D0ŽACCUMULATE ŠADD.L‚#4,D2ŠTST.B‚-(A0)ŽDECREMENTŠCMP.L‚A4,A0ŽFINISHED?ŠBGE.S‚CH2B4ŽNOŠADD.L‚#2,(A7)ŒBUMPPCCH2B10„RTS„RETURN**‰CONVERTBINARYTOHEX**‰ENTRY:D6=VALUE*A4=BUFFERPOINTER**(CB2H†LEA„BINASC(PC),A1†HEXTABLEPOINTER ŠMOVE.LA4,A0ŠMOVE.L#28,D1SHIFTVALUECB2H2…MOVE.LD6,D0 ŠASR.L‚D1,D0!ŠAND.L‚#$F,D0ISOLATEAHEXVALUE ŠBNE.S‚CB2H4 ŠCMP.L‚A0,A4 ŠBEQ.S‚CB2H6,CB2H4…MOVE.B0(A1,D0.L),(A0)+ƒSTOREHEXCHARCB2H6…SUB.L‚#4,D1 ŠBGE.S‚CB2H2ŠRTS*(BINASC„DC.Bƒ'0123456789ABCDEF'HEXTABLEŠPAGE**‰INPUTS-RECORDS*"*‰RETURN:A0=ADDRESSINS-RECORD*‘D0=LENGTHOFDATA*‘A4=POINTERTODATA**GETREC„LEA„IBLK3(PC),A0&ŠTST.L‚IOSRRN(A0)‰ANYTHINGINBUFFER?!ŠBNE.S‚GETR5ŽYES,SKIPREADBLOCK+GETR2…CLR.L‚IOSRRN(A0)‰RESETBUFFERPOINTERŠTRAPƒ#IOSTINŒGETRECORDŠBNE„GETR30ERROR,RETURNŠMOVE.LIOSSAD(A0),A2 ŠBRA.S‚GETR80GETR5…MOVE.LIOSRRN(A0),A2†SETUPBUFFERPOINTER ŠCLR.L‚D1%ŠMOVE.W(A2),D1ŒPICKUPRECORDLENGTH ŠADD.L‚D1,A2#ŠADD.L‚#2,A2ŽADD2FORLENGTHFIELD ŠMOVE.LA2,D1ŠBTSTƒ#0,D1ŽODDADDRESS?ŠBEQ.S‚GETR7ŽNO,OK"ŠADD.L‚#1,A2ŽADDABYTEFORFILLER/GETR7…MOVE.LIOSLEN(A0),D1†PICKUPX-FERLENGTHŠADD.L‚IOSSAD(A0),D1ŠCMP.L‚A2,D1ŽENDOFBLOCK?ŠBLE.S‚GETR2ŽYES$ŠTST.W‚(A2)LASTRECINTHISBLOCK?ŠBEQ.S‚GETR2ŽYES,GETR8…MOVE.LA2,IOSRRN(A0)†SAVETHISPOINTERŠADD.L‚#2,A2ŽSKIPLENGTHFIELD ŠM OVE.LA2,A4ŠCMP.W‚#'S0',(A4)‰S0RECORD?ŠBEQ.S‚GETRECYES,SKIPŠCMP.W‚#'S9',(A4)‰S9RECORD?ŠBEQ.S‚GETRECYES,SKIPITŠCMP.W‚#'S1',(A4)+ˆS1RECORD? ŠBEQ.S‚GETR9ŠCMP.W‚#'S2',-2(A4)‡S2RECORD?#ŠBEQ.S‚GETR9ŽYES,USEITƒ<<01/11/85ŠCMP.W‚#'S3',-2(A4)‡S3RECORD?"ŠBNE„GETRECNO,SKIPITƒ01/11/85>> GETR9…MOVE.L#2,D0ŽSETUPLENGTHŠBSR„CH2BCONVERTŠBRA.S‚GETR40ERRORRETURN%ŠMOVE.LD0,-(A7)‹SAVELENGTHONSTACK ŠMOVE.L#4,D0*ŠSUB.L‚#3,(A7)ŒADJUSTLENGTHFORDATAONLYŠCMP.W‚#'S1',-2(A4)‡S1?ŠBEQ.S‚GETR10YES'ŠSUB.L‚#1,(A7)ŒASSUMES2,ADJUSTLENGTHŠMOVE.L#6,D0ŽUSE6CHARACTERS)ŠCMP.W‚#'S3',-2(A4)‡ISITS3?‚<<01/11/85ŠBNE.S‚GETR10NO,ASSUMES2/ŠSUB.L‚#1,(A7)ŒIT'SS3,ADJUSTLENGTHSOMEMORE5ŠMOVE.L#8,D0ŽUSE8CHARACTERSFORADDRESS‚01/11/85>>&GETR10„TST.W‚(A4)+ŽBUMPBUFFERPOINTERŠBSR„CH2BCONVERTADDRESSŠBRA.S‚GETR40ERRORRETURN ŠMOVE.LD0,A0 ŠADD.L‚#4,A4ŽBUMPBUFFERPOINTERŠCMP.W‚#'S1',-8(A4)‡S1?ŠBEQ.S‚GETR20YES,ŠADD.L‚#2,A4ŽADJUSTBUFFERPOINTERFORANS2*ŠCMP.W‚#'S2',-10(A4)†ISITS2?ƒ<<01/11/85ŠBEQ.S‚GETR20YES1ŠADD.L‚#2,A4ŽNO,ADJUSTPOINTERFORS3‚01/11/85>>&GETR20„MOVE.L(A7)+,D0‹GETLENGTHBACK0ŠMOVE.B‚IBLK3+IOSSTA(PC),D7RESETCONDITIONCODE ŠTST.BƒD7GETR30„RTS„RETURNGETR40„BRA„RECERR***‰REWINDINPUTFILE(S)**4REWIND„LEA„IBLK3(PC),A0‹SETUPPOINTERTOFILEBLOCK'ŠMOVE.WIOSFCT(A0),D1†SAVEIOCBPOINTER1ŠMOVE.W#IOREWD,IOSFCT(A0)SETUPREWINDFUNCTION'ŠMOVE.B#1,IOSLUN(A0)†STARTWITHLUONE"REW10…TRAPƒ#IOSTINŒREWINDTHEFILEŠBNE„IOSERRERRORŠMOVE.BIOSLUN(A0),D2 ŠLEA„B(PC),A5/ŠCMP.B‚FBLK2+FHSLUN-B(A5),D2„REWINDALLFILES?ŠBEQ.S‚REW20ŽYES!ŠADD.B‚#1,IOSLUN(A0)†NO,BUMPLUNŠBRA.S‚REW10ŽCONTINUEREW20…MOVE.B#1,IOSLUN(A0)(ŠMOVE.WD1,IOSFCT(A0)†RESTOREIOCBBLOCK ŠRTS„RETURNŠPAGE ŠEND„TAG0ééééééé=/* =/*†MIGR.AF=/**=/* Chain file to assemble MIGRate utility=/*:=/* If no output argument is specified for the listing the&=/* chain file will default to MIGR.LS=/*=/IFC \1 ƒ=ARGMIGR.LS=/ENDIF=/*=ASM MIGR.SA,MIGR.RO,\1;RZ=106 =/*{ Included files are:=/*ƒ9995.&.FME.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.&.TR1.EQ=/*}=/*=ENDéééééé7=/* =/*†MIGR.LF=/*%=/* Link chain file to create MIGR.LO=/*:=/* If no output argument is specified for the listing the&=/* chain file will default to MIGR.LL=/*=/IFC \1 ƒ=ARGMIGR.LL=/ENDIF=/*=LINK ,MIGR.LO,\1;AHMIXATTRIBUTES D PSEG SEG0:0,14 $0000 INPUT MIGR.ROLIB 0.&.UTILIB.ROEND=/*=ENDéééééé @ LIST MIGRATE‚IDNT†4,0‡MIGRATEUTILITY PAGEO*********************************************************************************•PROGRAMNAMEIS'MIGRATOR'* *REV2.00‚03/18/80‚(S.DEARING)**•***„MIGRATORCOMMAND„****.*ˆMIGR<#DEVICE/MDOSFILENAME>,*$* WHERE MDOS FILENAME = FILENAME.EXT9*‚AND‚MACSFILENAME=VOLUME:USERNUM.CATALOG.FILENAME.EXT*K* THIS COMMAND WILL COPY A M6800 ASCII FILE TO A M68000 ASCII FILE. NO DATA** CONVERSION IS PERFORMED DURING THE COPY.*!* REGISTERS USED: 0 1 2 3 4 5 6 7*Dƒ********Aƒ********** TABLES USED: NONE*O********************************************************************************‰PAGE***ˆINCLUDEFILES***ˆINCLUDE9995.&.FME.EQ*ˆINCLUDE9995.&.IOE.EQ*ˆINCLUDE9995.&.TR1.EQ**‰NOLIST‰INCLUDE9995.&.FME.EQ‰INCLUDE9995.&.IOE.EQ‰INCLUDE9995.&.TR1.EQ‰LIST**‰PAGE****ˆMIGRƒMODIFICATIONHISTORY****ˆREVISIONCODE‡1220844*!*’FORCEPOSITIONINDEPENDENTCODE**ˆREVISIONCODE‡1028813* *’CONTAINSERRORMESSAGEHANDLER$*’CONTAINSPOSITIONINDEPENDENTCODE-*’CONTAINSCURRENTREVISIONCODEMODIFICATION5*’CONTAINSTERMINATIONLOGICFORUSEWITHCHAINFILES1*’CONTAINSCOMMONSUBROUTINESPULLEDFROMLIBRARY*’USESTHE'SBARG'ROUTINE3*’CONTAINSTHEADDEDCHARACTERSPACEFOR'SBARG'TO*œPLACEA'CR'**‰PAGE****ˆMIGRƒMODIFICATIONHISTORY****ˆREVISIONCODE‡1203813*)*’CORRECTPROBLEMOFINVALIDOPTIONCHECK;*’CORRECTPROBLEMTOUSESTANDARD'OKTOOVERWRITE'MESSAGE2*’CORRECTPROBLEMOF'EOF'CONVERTINGANMDOSFILE**‰PAGEO********************************************************************************!*’***„DATASEGMENTDESCRIPTOR„****O******************************************************************************* SECTION…0 PBA†EQU‡* REV_CODE:‰DC.B†'1220844'&*œWHEREREV_CODEISDEFINEDASFOLLOWS *œMMDDYYXZ*IbRvZ_bJj:r?z:‚;Š5’?šM¢^ª13*œMMDDYY=MONTHDAYYEAROFLASTASSEMBLYORPATCH*œX†=REVISIONTYPECODE*¦SPACE=CLEANASSEMBLY *¦P…=PATCHED*¦C…=CUSTOMIZEDPATCHED**#*œZ†=VERSADOSMAJORREVISIONFIELD* DS.W 50 MIGRSTK EQU * TSKNAM DC.L 0 SESNUM DC.L 0 VOLNAM DC.L 0USERNUM DC.L 0CATNAM DC.L 0,0SAVINADD DC.L 0SAVOTADD DC.L 0RIBPNTR DC.L 0CLUSTNUM DC.W 0NUMCLSTR DC.W 0 LSNCNT DC.W 0 EOFLSN DC.W 0RECFLAG DC.W 0 SAVED0 DC.W 0CMDLGTH EQU 80CMDBUF COMLINE 80CMDBUFE EQU *-1MSGBUFDC.B'…'MSGBUFSZEQU‡*-MSGBUFMSGBUFND EQU *-1‰DS.B†1**œSPACEREQUIREDFORSBARGTOPLACEA'CR'INBUFF DS.L 32SECT0MID EQU * DS.L 32 SECT1 EQU * DS.L 32SECT1MID EQU * DS.L 32 SECT2 EQU * DS.L 32SECT2MID EQU * DS.L 32SECT2END EQU *-1 DS.L448’ DS.L 32SECTEMID EQU *-1 DS.L 32INBUFFND EQU *-1RIBUFF DS.L 29RIBUFEND EQU *-1‰DS.W†0MSG2 DC.B 'MIGR- ' DC.B 'DEVICE NAME ERROR 'MSG2ND EQU *-1‰DS.W†0MSG4 DC.B 'MIGR- ' DC.B 'INPUT FILENAME ERROR'MSG4ND EQU *-1 MSG6 DC.B 'MIGR- ' DC.B 'FILENAME NOT FOUND'MSG6ND EQU *-1‰DS.W†0MSG8 DC.B 'MIGR- ' DC.B 'OUTPUT FILENAME ERROR 'MSG8ND EQU *-1‰DS.W†0MSG11 DC.B 'MIGR- ' DC.B 'EOF ERROR 'MSG11ND EQU *-1‰DS.W†0MSG13 DC.B 'MIGR- ' DC.B 'BUFFER OVERFLOW ERROR 'MSG13ND EQU *-1MSG14:.‰DC.B†'FILEEXISTS-OKTOOVERWRITE(Y/N)?'MSG14ND EQU *-1‰DS.W†0MSG19 DC.B 'MIGR- ' DC.B 'FILE FORMAT NOT ASCII 'MSG19ND EQU *-1ENDMSGDC.B'**‚'‰DC.B†'MIGRATIONVER SION' ENDMSGVN: ‰DC.B†'‰'‰DC.B†'COMPLETED'ENDMSGND EQU *-1‰DS.W†0INFHS DC.W FHASGN DC.W FOPEREW DC.B 0 DC.B1–;LUN1 DC.L 0 DC.W 0 DC.L $20202020 DC.L $20202020 DC.L $20202020 DC.L $20202020 DC.W $2020 DC.W 0,0,0 DC.L 0INIOCB DC.W IOREAD DC.W IOPRAN DC.B 0 DC.B1–LUN1 DC.W 0DC.L1–RANDOMRECORD#1 DC.L 0 DC.L 0 DC.L 0,0OUTFHS DC.W FHALLO+FHASGN DC.W FOPEREW+FOPTRN+FOPSEQ DC.B 0 DC.B2–LUN2 DC.L 0 DC.W 0 DC.L $20202020 DC.L $20202020 DC.L $20202020 DC.L $20202020 DC.W $2020 DC.W 0,0,0 DC.L 0OUTIOCB DC.W IOWRIT DC.W IOPASC+IOPWAT DC.B 0 DC.B 2 DC.W 0 DC.L 0,0,0,0,0IN5IOS DC.W IOREAD DC.W IOPWAT DC.B 0 DC.B CDFLUN DC.W 0 DC.L 0 DC.L 0 DC.L 0 DC.L 0,0OUT6IOS DC.W IOWRIT DC.W IOPWAT DC.B 0 DC.B LDFLUN DC.W 0 DC.L 0,0,0,0,0‰PAGE***’ERRORMESSAGEPARAMETERBLOCK**EM_PBLK: EM_DO:ƒDC.L†0"*œD0-IOS/FHSRETURNERRORSTATUS*œ(ERRORMSGKEYVALUE) EM_A0:ƒDC.L†0"*œA0-ADDROFI/OPARAMETERBLOCKEM_OPT:‚DC.B†0*œOPTIONSFLAG*œBIT‡MEANINGIFSET*0ˆQUERYRESPONSEDESIREDEM_TLUN:DC.B†0*œUSERTERMINALLUN-(LDFLUN)EM_QRC:‚DC.B†0*œQUERYRETURNCHARACTEREM_KLUN:DC.B†0*œUSERKEYBOARDLUN-(CDFLUN)EM_SPA:‚DC.L†0'*œSTARTADDRESSFORUSERTEXTPLUGPOOLEM_EPA:‚DC.L†0%*œENDƒADDRESSFORUSERTEXTPLUGPOOL‰PAGE***:*ˆINASMUCHASPOSSIBLEREGISTER'A5'WILLBEUSEDASTHE%*ˆPROGRAMBASEADDRESS(PBA)REGISTER*** ‰PAGE‰XREF…PARSE,EDITFILE,SBARG*.MGRSTART LEA MIGRSTK(PC),A7 LOAD STACK POINTER‰LEA‡PBA(PC),A5*œA5=PBA*&* SAVE DEFAULT VALUES PASSED BY SYSTEM*0MOVE.LD0,TSKNAM-PBA(A5)…SAVECALLINGTASKNAME(MOVE.LD1,SESNUM-PBA(A5)…SAVESESSION#2MOVE.LD2,VOLNAM-PBA(A5)…SAVEDEFAULTVOLUMENAME6MOVE.WD3,USERNUM-PBA(A5)„SAVEUSER#(16BITBINARY)3MOVE.LD4,CATNAM-PBA(A5)…SAVEDEFAULTCATALOGNAME MOVE.L D5,CATNAM+4-PBA(A5)‰LEA‡INBUFF(PC),A0 ‰MOVE.L„A0,INIOCB-PBA+IOSSAD(A5)‰LEA‡INBUFFND(PC),A0 ‰MOVE.L„A0,INIOCB-PBA+IOSEAD(A5).*œSETSTART/ENDADDRININIOCBPARAMETERBLOCK‰LEA‡MSGBUF(PC),A0 ‰MOVE.L„A0,IN5IOS-PBA+IOSSAD(A5)‰ADD.L…#MSGBUFSZ,A0 ‰MOVE.L„A0,IN5IOS-PBA+IOSEAD(A5).*œSETSTART/ENDADDRININ5IOSPARAMETERBLOCK)‰MOVE.L„REV_CODE-PBA(A5),ENDMSGVN-PBA(A5)-‰MOVE.L„REV_CODE+4-PBA(A5),ENDMSGVN+4-PBA(A5)**œMOVEREVISIONCODETOCOMPLETIONMESSAGE** CALL COMMAND PARSE ROUTINE** LEA CMDBUF(PC),A0 GET COMMAND BUFFER ADDR BSR PARSE GO TO PARSE ROUTINE TST.L D0 TEST FOR ERROR BMI MIGRER1 BR IF ERROR ‰CMP.L…#0,A2 ‰BNE.S…X00100*œJMPIFOPTIONSSPECIFIED‰LEA‡PBA(PC),A53MOVE.LA1,SAVOTADD-PBA(A5)‰SAVEMACSFILENAMEADDR(BSR.S‚INITMIGRGOTOINPUTINITROUTINE' BSR OTITMIGR GO TO OUTPUT INIT ROUTINE BSR COPYMIGR GO TO COPY ROUTINE LEA OUT6IOS(PC),A6‰LEA‡ENDMSG(PC),A0 MOVE.L A0,IOSSAD(A6)‰LEA‡ENDMSGND(PC),A0 MOVE.L A0,IOSEAD(A6) IOSCALL (A6) ‰BNE‡EMH_020*œJMPIFERROR ‰BRA‡EMH_030*œTERMINATENORMALX00100:‰MOVE.L„#EM_NVO,D0'*œD0=KEYVALUEFORMSG-INVALIDOPTION ‰BRA‡EMH_020*œTERMINATEDEPROGRAM PAGEO*********************************************************************************SUBROUTINENAMEIS'INITMIGR'* *REV1.10‚11/30/79‚(S.DEARING)*N* THIS SUBROUTINE WILL ASSIGN THE DEVICE FOR THE INPUT MDOS FILE AND WILL READN* THE DIRECTORY AND SEARCH FOR THE INPUT FILENAME. THE 1ST CLUSTER ON THE FILE<* WILL ALSO BE READ AND THE RIB (1ST 128 BYTE SECTOR) SAVED.** CALLING SEQUENCE:*†BSR„INITMIGR*!* REGISTERS USED: 0 1 2 3 4 5 6 7 *Dƒ*****Aƒ****ƒ**** SUBROUTINES CALLED: EDITFILE** TABLES USED: NONE*O*******************************************************************************INITMIGR EQU **5* CALL EDITFILE TO PUT DEVICE NAME IN FHS PARAM BLOCK*)‰LEA‡CMDBUF(PC),A0ŒADDROFCMDBUFFSTART)‰LEA‡INFHS(PC),A6ADDROFINPUTFHSBLOCK& BSR EDITFILE CALL EDITFILE FOR DE VICE‰LEA‡PBA(PC),A5*œA5=PBABMIMIGRER2‘JMPIFCALLERROR BTST #1,D0(BEQMIGRER2‘JMPIFDEVICENOTSPECIFIED BTST #0,D0=BEQMIGRER2‘JMPIFIMPROPERDELIMITERAFTERDEVICESPECIFIED3MOVE.LA0,SAVINADD-PBA(A5)ŒSAVEMDOSFILENAMEADDR** ASSIGN DEVICE FOR INPUT*4 FHSCALL (A6) CALL FHS TO ASSIGN INPUT DEVICE (LUN1) ‰BNE‡EMH_020*œJMPIFASSIGNERROR"* CALL EDITFILE FOR INPUT FILENAME*5 MOVE.L SAVINADD-PBA(A5),A0 SET UP MDOS FILENAME ADDR. BSR EDITFILE CALL EDITFILE FOR INPUT FILENAME‰LEA‡PBA(PC),A5*œA5=PBABMIMIGRER4‘JMPIFCALLERROR BTST #19,D00BEQMIGRER4‘JMPIFNOINPUTFILENAMESPECIFIED BTST #22,D04BNEMIGRER4‘JMPIFVOLUMESPECIFIEDFORINPUTFIELD BTST #20,D05BNEMIGRER4‘JMPIFCATALOGSPECIFIEDFORINPUTFIELD BTST #18,D08BNE.SINIT10JMPIFEXTENSIONSPECIFIEDFORINPUTFIELDD MOVE.W #'SA',FHSEXT(A6) FORCE DEFAULT EXTENSION IN FHS BLOCK TO .SA*>* READ DIRECTORY FROM MDOS FILE (11 SECTORS OF 256 BYTES EACH)*(INIT10 IOSCALL INIOCB(PC) READ DIRECTORY ‰BNE‡EMH_020*N* MDOS DIRECTORY STARTS IN SECTOR 3 OF MDOS FILE (MDOS SECTORS ARE 128 BYTES).M* THIS CORRESPONDS TO THE 2ND HALF OF SECTOR 1 FOR A 256 BYTE SECTOR FOR THE * M68000 DISK.*/‰LEA‡INIOCB(PC),A0‹ADDROFINPUTIIOSPARAMBLK4‰LEA‡SECT0MID(PC),A1‰GETADDROF1STDIRECTORYENTRY7INIT20 MOVE.L A1,A2 SAVE START OFF THIS DIRECTORY ENTRY2 LEA FHSFIL(A6),A3 GET INPUT FILENAME FROM FHS BLK+ CMPM.L (A2)+,(A3)+ 1ST 4 BYTES = FILENAME?* BNE.S INIT30 NO, GET NEXT DIRECTORY ENTRY+ CMPM.L (A2)+,(A3)+ 2ND 4 BYTES = FILENAME?* BNE.S INIT30 NO, GET NEXT DIRECTORY ENTRY CMPM.W (A2)+,(A3)+ EXTENTS = ?" BEQ.S INIT40 YES, DIRECTORY FOUND** FIND NEXT DIRECTORY ENTRY*4INIT30 ADD.L #16,A1 INCREMENT TO NEXT DIR ENTRY ADDR‰LEA‡SECTEMID(PC),A2.‰CMP.L…A2,A1…ISITPASTTHEENDOFTHEBUFFER?) BMI.S INIT20 NO, GO CHECK NEXT DIR ENTRY, BRA MIGRER6 YES, ERROR - FILENAME NOT FOUND** FOUND DIRECTORY ENTRY*INIT40 CLR.L D10 MOVE.W (A2)+,D1 SAVE PSN FOR 1ST SECTOR OF FILE( MOVE.W (A2),D2 GET FILE ATTRIBUTE BYTES% AND.W #$0700,D2 GET FILE FORMAT BITS CMP.W #$0500,D2 IS IT ASCII? BNE MIGRER19 NO, ERROR*N* CALCULATE THE 1ST PHYSICAL SECTOR # OF THE FILE FOR M68000. (DIVIDE THE MDOSO* PSN BY 2). DATA WILL BE READ IN MDOS CLUSTERS; 4 128 BYTE SECTORS INTO 2 256 * BYTE SECTORS.(*ˆALLPSN'SINMDOSAREAMULTIPLEOF4.*! LSR.L #1,D1 DIVIDE MDOS PSN BY 2/ MOVE.L D1,IOSRRN(A0) PUT MACS PSN IN IOS BLOCK‰LEA‡SECT1(PC),A1/ MOVE.L A1,IOSSAD(A0) SET START ADDR IN IOS BLK‰LEA‡SECT2END(PC),A1- MOVE.L A1,IOSEAD(A0) SET END ADDR IN IOS BLK*D* READ RETRIEVAL INFORMATION BLOCK (RIB) AND 3 128 BYTE DATA SECTORS* IOSCALL (A0) READ RIB AND DATA‰BNE‡EMH_020‹JMPIFREADERROR+‰LEA‡SECT1(PC),A1ŠGETADDROFRIBINBUFFER, MOVE.W #116/2,D1 LOAD # WORDS TO MOVE (RIB)' LEA RIBUFF(PC),A2 LOAD RIB BUFFER ADDR. MOVE.L A2,RIBPNTR-PBA(A5) SAVE POINTER TO RIB&INIT50 MOVE.W (A1),D3 GET SDW FROM RIB& BPL.S INIT60 BR IF NOT TERMINATOR SDW% AND.W #$7FFF,D3 CLEAR TERMINATOR BIT3 MOVE.W D3,EOFLSN-PBA(A5) SAVE EOF LOGICAL SECTOR #- MOVE.W (A1),(A2) MOVE TERMINATOR SDW TO WORK+ BRA.S INIT70 GO INITIALIZE FIELDS FOR COPY5INIT60 MOVE.W (A1)+,(A2)+ MOVE RIB FROM INPUT TO WORK SUB.W #1,D1 DECREMENT COUNTER BNE.S INIT50 BR IF MORE TO MOVE*!* INITIALIZE FIELDS TO BEGIN COPY*3INIT70 SUB.W #1,LSNCNT-PBA(A5) INIT LSN COUNT TO -1* MOVE.L RIBPNTR-PBA(A5),A2 GET ADDR TO RIB$ MOVE.W (A2),D1 GET 1ST SDW FROM RIB3 AND.W #$03FF,D1 GET STARTING CLUSTER # FOR SEGMENT0 ADD.W #1,D1 ADD 1 FOR CLUSTER ALREADY READ AND MOVE.W D1,CLUSTNUM-PBA(A5) SAVE$ MOVE.W (A2),D1 GET 1ST SDW FROM RIB, AND.W #$7C00,D1 GET # CONTIGUOUS CLUSTERS-1 MOVE.L #10,D3 LOAD SHIFT COUNT- LSR.W D3,D1 SHIFT TO LOW ORDER BITS AND SAVE; MOVE.W D1,NUMCLSTR-PBA(A5) AS TRUE # CLUSTERS LEFT TO READ RTS . RETURN TO CALLER PAGEO*********************************************************************************SUBROUTINE NAMEIS'OTITMIGR'* *REV1.10‚01/31/80‚(S.DEARING)*D* THIS SUBROUTINE WILL ASSIGN AND ALLOCATE THE OUTPUT FILE FOR MACS.** CALLING SEQUENCE:*†BSR„OTITMIGR*!* REGISTERS USED: 0 1 2 3 4 5 6 7*Dƒ* *Aƒ*‰**** SUBROUTINES CALLED: EDITFILE** TABLES USED: NONE*O*******************************************************************************OTITMIGR EQU **'* INITIALIZE OUTPUT FHS PARAMETER BLOCK*‰LEA‡PBA(PC),A57 MOVE.L SAVOTADD-PBA(A5),A0 GET ADDR OF OUTPUT FILENAME/ LEA OUTFHS(PC),A6 GET ADDR OF OUTPUT FHS BLOCK? MOVE.L VOLNAM-PBA(A5),FHSVOL(A6) SET DEFAULT VOLUME IN FHS BLK@ MOVE.W USERNUM-PBA(A5),FHSUSN(A6) SET DEFAULT USER # IN FHS BLKC MOVE.L CATNAM-PBA(A5),FHSCLG(A6) SET DEFAULT CATLG NAME IN FHS BLK% MOVE.L CATNAM+4-PBA(A5),FHSCLG+4(A6)- LEA INFHS(PC),A1 SET ADDR OF INPUT FHS BLOCK9 MOVE.W FHSEXT(A1),FHSEXT(A6) MOVE INPUT EXTENT TO OUTPUT6‰TST.L…SAVOTADD-PBA(A5)ŒWASOUTPUTFILENAMESPECIFIED?& BNE.S OTIT10 YES, GO PROCESS FILENAME; MOVE.L FHSFIL(A1),FHSFIL(A6) MOVE INPUT FILENAME TO OUTPUT+ MOVE.L FHSFIL+4(A1),FHSFIL+4(A6) FHS BLOCK BRA.S OTIT205OTIT10 BSR EDITFILE CALL EDITFILE FOR OUTPUT FILENAME‰LEA‡PBA(PC),A5*œA5=PBA BMI MIGRER8 BR IF ERROR BTST #19,D0 WAS FILENAME FOUND? BEQ MIGRER8 NO, ERROR*!* ASSIGN AND ALLOCATE OUTPUT FILE*5OTIT20 FHSCALL (A6) ASSIGN AND ALLOCATE OUTPUT (LUN2)BEQ.S‚OTIT40BRIFNOERROR9 CMP.B #FSTADNM,FHSSTA(A6) IS THERE A DUPLICATE FILENAME? ‰BNE‡EMH_020%*œJMPIFERRORNOTFORDUPLICATEFILE4‡LEAOUT6IOS(PC),A6GETADDROFCRTOUTPUTIOSBLOCK‰MOVE.W„FHSOPT(A6),-(A7)*œSAVECURRENTOPTIONS!‰MOVE.W„#IOPWAT+IOPIMG,FHSOPT(A6)*œSETNEWOPTIONS*¦WAIT *¦IMAGEMODE.‰LEA‡MSG14(PC),A0ŒSETUPSTARTADDROFMESSAGE‰MOVE.L„A0,IOSSAD(A6)‰LEA‡MSG14ND(PC),A00‰MOVE.L„A0,IOSEAD(A6)‡SETUPENDADDROFMESSAGE. IOSCALL (A6) WRITE OUT DUPLICATE FILENAME MSG ‰BNE‡EMH_020*œJMPIFERROR‰MOVE.W„(A7)+,FHSOPT(A6)*œRESTOREOPTIONS. IOSCALL IN5IOS(PC) GET RESPONSE FROM TERMINAL ‰BNE‡EMH_020*œJMPIFERROR ‰BSR‡SBARG/*œCONVERTLOWERCASETOUPPERCASEIFNECESSARY ‰BNE‡EMH_020*œJMPIFSBARGERROR4 CMP.B #'Y',MSGBUF-PBA(A5) IS FILENAME TO BE REUSED? ‰BNE‡EMH_030"*œJMPIFNOANDTERMINATENORMALLY4 LEA OUTFHS(PC),A6 GET ADDR OF DISK OUTPUT FHS BLOCK/ MOVE.W #FHDELT,FHSCMD(A6) SET DELETE CMND CODE! FHSCALL (A6) DELETE OLD FILENAME ‰BNE‡EMH_020*œJMPIFERRORF MOVE.W #FHALLO+FHASGN,FHSCMD(A6) RESET FHS CMD TO ASSIGN AND ALLOCATE) BRA OTIT20 GO ASSIGN AND ALLOCATE OUTPUTOTIT40 RTS . RETURN TO CALLER PAGEO*********************************************************************************SUBROUTINENAMEIS'COPYMIGR'* *REV1.21‚01/31/80‚(S.DEARING)*F* THIS SUBROUTINE WILL COPY INPUT MDOS RECORDS TO AN OUTPUT MACS FILE.** CALLING SEQUENCE:*†BSR„COPYMIGR*!* REGISTERS USED: 0 1 2 3 4 5 6 7 *D…****A…******** SUBROUTINES CALLED: NONE** TABLES USED: NONE*O*******************************************************************************COPYMIGR EQU */ LEA INIOCB(PC),A4 GET INPUT IOS PARAM BLK ADDR1 LEA OUTIOCB(PC),A6 GET OUTPUT IOS PARAM BLK ADDR.‰LEA‡SECT1MID(PC),A1‰GETINPUTDATASTARTADDR,‰LEA‡SECT2END(PC),A2‰GETINPUTDATAENDADDRACOPY10 MOVE.L A1,IOSSAD(A6) PUT OUTPUT DATA START ADDR IN IOS BLK*M* CHECK FOR DATA ADDRESS = TO BEGINNING OF MDOS 128 BYTE SECTOR TO UPDATE LSN * COUNTER*COPY20:‰LEA‡SECT1(PC),A0-‰CMP.L…A0,A1…ISADDRTHESTARTOF1STSECTOR?+ BEQ.S COPY30 YES, GO INCREMENT LSN COUNTER‰LEA‡SECT1MID(PC),A0-‰CMP.L…A0,A1…ISADDRTHESTARTOF2NDSECTOR?+ BEQ.S COPY30 YES, GO INCREMENT LSN COUNTER‰LEA‡SECT2(PC),A0-‰CMP.L…A0,A1…ISADDRTHESTARTOF3RDSECTOR?+ BEQ.S COPY30 YES, GO INCREMENT LSN COUNTER‰LEA‡SECT2MID(PC),A0-‰CMP.L…A0,A1…ISADDRTHESTARTOF4THSECTOR?" BNE.S COPY40 NO, BYPASS INCREMENT3COPY30 ADD.W #1,LSNCNT-PBA(A5) ADD 1 TO LSN COUN TER)COPY40 MOVE.B (A1)+,D1 GET DATA CHARACTER' CMP.B #$0D,D1 IS IT A CARRIAGE RETURN?) BEQ.S COPY60 YES, GO WRITE OUTPUT RECORD! TST.B D1 IS IT A NULL CHARACTER?% BNE.S COPY45 NO, SET GOOD DATA FOUND3 CMP.W #1,RECFLAG-PBA(A5) HAS GOOD DATA BEEN FOUND?BNE.SƒCOPY69NO,BYPASSNULLS. BRA.S COPY50 YES, GO CHECK PAST END OF BUFFER4COPY45 MOVE.W #1,RECFLAG-PBA(A5) SET GOOD DATA FOUND5COPY50 CMP.L A1,A2 ARE WE PAST THE END OF THE BUFFER?$BMI.S‚COPY70YES,GOREADMOREDATA% BRA.S COPY20 GO CHECK NEXT DATA CHAR** WRITE OUTPUT RECORD*6COPY60 MOVE.W #0,RECFLAG-PBA(A5) CLEAR GOOD DATA FOUND6 MOVE.L A1,IOSEAD(A6) SAVE DATA END ADDR IN OUTPUT IOS7 SUB.L #2,IOSEAD(A6) BLOCK AND ADJUST BACK TO BEFORE CR0 MOVE.L IOSSAD(A6),A3 GET OUTPUT DATA START ADDR9 CMP.L IOSEAD(A6),A3 IS ENDING ADDR LESS THAN START ADDR?' BLE.S COPY61 NO, GO CHECK FOR ADDR ODD7 MOVE.B #' ',(A3) REPLACE CR WITH A BLANK 1 CHAR RECORD6 ADD.L #1,IOSEAD(A6) ADD 1 TO END DATA ADDR IN IOS BLK8COPY61MOVE.L‚IOSSAD(A6),D0ƒMOVEADDRESSTOREGFORTESTBTST‚#0,D0‚ISADDRESSODD?!BEQ.S‚COPY68NO,GOWRITERECORD$ MOVE.L A3,A0 SET UP ADDR TO MOVE TO SUB.L #1,A09COPY62 MOVE.B (A3)+,(A0)+ SHIFT ALL BYTES LEFT 1 POSITION/ CMP.L IOSEAD(A6),A0 HAVE WE SHIFTED ALL BYTES? BNE.S COPY62 NO, GO DO MORE* SUB.L #1,IOSSAD(A6) RESET START DATA ADDR( SUB.L #1,IOSEAD(A6) RESET END DATA ADDR COPY68 IOSCALL (A6) WRITE RECORD ‰BNE‡EMH_020*œJMPIFWRITEERROR*L* Where #xxxx is a disk device mnemonic of the form #FDXX for floppy disk orN* #HDXX for hard disk and 'XX' is a drive/controller number defined by SYSgen.*B* General register usage : A0 = FHS or IOS Parameter Block address'*šA1=CurrentconfigurationPBaddress *šA2=VIDsectorbufferaddress-*šA3=Diskconfigurationareabufferaddress#*šA5=Outputmessagestartaddress!*šA6=Outputmessageendaddress* Ä.ÍNÕCÝBå?í0õ1ý31 302%0-+50=*E3MN********************************************************************************‰MODIFICATIONHISTORY**‰REVISION‚0105844*4*’ModifiedincludefileDSKCFGCD.AIsoasnottouse@*ˆtagsVOLMMTDEandSENDMSG,whichareinINITonly.Instead,anG*ˆinternaltagwasaddedtoDSKCFGCD,CRLF,andinternaltagMSGOUTwas*ˆusedinsteadofSENDMSG.**‰REVISION‚11098445*’ModifiedincludefileDSKCFGDT.AIfornewattribute+*ˆforalternatesector-capablecontrollers.*O********************************************************************************ŠSPC„2*‰INCLUDE‚9995.&.FME.EQ*‰INCLUDE‚9995.&.TR1.EQ*‰INCLUDE‚9995.&.IOE.EQ*‰INCLUDE‚DSKCFGCD.AI*‰INCLUDE‚DSKCFGDT.AIŠSPC„22ŠTTLVdosMountUtilityV4.01(DataDeclarations)ŠPAGEŠNOLISTŠINCLUDE‚9995.&.FME.EQŠINCLUDE‚9995.&.TR1.EQŠINCLUDE‚9995.&.IOE.EQŠLIST ŠSECTION‚0 PBA†EQU‡*.SDATA…DC.Bƒ'1220844'‰RevisionnumberanddateŠSPC„2ŠDS.Bƒ$100Stackstorage STACK…EQU„*ŠSPC„2*4* Parameter Block storage for VERSAdos system calls.*)FHSBLK„DCB.B‚FHSBLN,0‹FHSparameterblock ** Miscellaneous storage*/COMAND„COMLINE82InvokingcommandlinestorageCOMANDEƒEQU„*-1 +SCTREGSƒDS.Lƒ12‘StorageforSCTpasseddataŠSPC„2** Disk I/O buffers*;VIDBUF„DS.Bƒ$100StoragefortheVID(sector0)ofthediskVIDBUFEƒEQU„*-1tobemounted. ;SECTBUFƒDS.Bƒ$100Storagefortheconfigurationareaofthe$SECTBUFE‚EQU„*-1disktobemounted.ŠPAGE**‚Miscellaneousdataflags*,VDOSFLGƒDC.Bƒ0“VERSAdosinitilizeddiskflag 7IPCFLG„DC.Bƒ0“Thisflagischeckedpriortotermination-*£todetermineifthediskmountedwasanIPC+*£typediskwithoutaconfigurationareaor,*£IPCdisktypecodeintheVID.Iftheflag**£isset,thedisktypecodeiswrittento *£theVID.ŠSPC„22CDRIVFLG‚DC.Bƒ0”Thisflagissetwhenthe'D'(for**£MountDrive)isspecifiedonthecommand*£line.ŠDS.Wƒ0*L*ƒThefollowingtablecontainsafullconfigurationparameterblockforeachI* of one or more IPC initialized disks. The appropriate configuration forI* a particular disk type is indexed by the disk type field of the VID for* VERSAdos initialized disks.*IPCTBL„DS.Bƒ1’StatusŠDC.BƒXTDIPCChanneltypeŠDC.BƒXDSFDKDevicetypeŠDC.BƒIODIPCDrivertypeŠSPC„2/ŠDC.Wƒ$FFFFŽAtttributesmask(mustbenon-zero).ŠDC.Wƒ$FFFFŽParametersmask(mustbenon-zero)ŠSPC„2*Á9/27/83MLB*>ŠDC.Wƒ1<EDITOK„EQU„$0040BC02ŠValuereturnedinD0byEDITFILEwhenthe**£inputfieldofthecommandlinecontains*£onlyadevicemnemonic. 2MAXIPC„EQU„2“Thisisthemaximumvalueallowedfor+*£theIPCdisktypecode.Presently,single(*£anddoublesidedfloppiesaretheonly*£recognizedIPCdisktypes. *CRˆEQU„$0D‘ASCIIcarriagereturncharacter 4SSFPY…EQU„1”Theseequatesdefinethedisktypecodes2DSFPY…EQU„2’forIPCformatsingleanddoublesided*£floppydisks.ŠSPC„23LFˆEQU„$200AASCIIblankfollowedbyASCIIlinefeedŠSPC„2M*ƒGenerateamasktoclearallbitsintheattributesandparametersthatareN* not media related are unmodifiable values, return only values, or are values%* related to the physical disk drive. 9MSKUNATM‚EQU„1<EXITERR2‚BSR.L‚EMHOUTCalltheerrormessagehandlertooutput7ŠBRA.L‚MTABRT10‹theerrormessageandterminatewithout*£doingadismount.ŠSPC„2=MNT017„LEA.L‚IOSBLK(PC),A0‰InitializetheIOSparameterblock<ŠMOVE.W#IOSTAT,IOSFCT(A0)‚toperformaconfiguration/status2ŠMOVE.B#INPUTLU,IOSLUN(A0)requestonthedevice.ŠSPC„29ŠLEA.L‚CNFGBLK(PC),A1ŒInitializethebufferstartandend<ŠMOVE.LA1,IOSDBP(A0)‹addressfieldsoftheIOCBtopointto)ŠTRAPƒ#2–theareawheretheconfiguration0ŠBNE.L‚EXITERR‘informationwillbereturned,and'*¨issuetherequest.Thereshouldnever&*¨beanerrorreturnfromthisrequest"*¨butthereturnstatusischecked *¨anyway.ŠPAGE9ŠMOVE.L#EM_NVDEV,D0‰Ifthedevicetypecodeisnotfora?ŠCMP.B‚#XDSRDK,IOSDTP(A1)floppyorharddisk,issueaninvalid6ŠBHI.L‚EXITERRŒdeviceerror.Thedevicetypeiseither(*£oneortwoforadiskdevice.Adevice*£typeofzeroisimpossible.ŠSPC„2<ŠCMP.B‚#XTDIPC,IOSCTP(A1)ƒIfthechanneltypeshowsthatthe.ŠBNE.S‚MNT020driveisnotconnectedtoanIPC**£controller,executionproceedsnormally.ŠSPC„2;ŠLEA.L‚MSGIPC(PC),A5‡Ifthespecifieddriveisconnectedto9ŠLEA.L‚MSGIPCE(PC),A6…anIPCcontroller,outputamessage$*£tellingtheuserthatmountisnot*£necessary,andterminate.ŠSPC„28MSGEXITƒBSR.L‚MSGOUTOutputthemessagepointedtobyA55ŠBRA.L‚MTABRTandA6tothesystemlogoutputdevice,*£andterminatetheutility.ŠSPC„2*À9/27/83MLB*@MNT020„TST.B‚IOSDST(A1)‹Ifbit7ofthedevicestatusisclear,*7ŠBMI.S‚MNT030thedeviceison-line.Sincethedevice‚*@ŠLEA.L‚MSGONLN(PC),A5…shouldb  eoff-linebeforecallingMOUNT,*AŠLEA.L‚MSGONLNE(PC),A6„sendamessagetotheuserandterminate*8ŠBSR.L‚MSGOUTwithoutissuingaDismountcommandtothe*ŠBRA.L‚EXITdriver.¢**À9/27/83MLB*ŠSPC„2EMNT030„MOVE.BCDRIVFLG-PBA(A4),D0†Iftheconfiguredriveflagisset,7ŠBNE.L‚CONFGDRV‹transfercontroltotheconfiguredrive *£routine.ŠSPC„2AŠMOVE.LIOSATM(A1),-(A7)…Savetheattributesandparametersmasks&*£returnedbytheconfigurationstatus)*£requestonthestack.Thetwomasksare *£alwaysadjacent16-bitvalues.ŠSPC„2:ŠCLR.L‚IOSATM(A1)‹Issueaconfigurerequesttothedriver.AŠMOVE.W#IOCNFG,IOSFCT(A0)SetboththeattributesandparametersFŠMOVE.W#IOPMNT,IOSOPT(A0)maskstozerotopreventanyofthecurrent3ŠTRAPƒ#2‘configurationdatafrombeingchanged.The9ŠBNE.L‚EXITERRŒMountoptionissettocausethedriverto&*£putthedeviceon-lineandallowI/O+*£requeststobeprocessed.Noerrorshould*£bereturnedonthisrequest.ŠSPC„2BŠMOVE.L(A7)+,IOSATM(A1)…Restorethemasksofsupportedattributes *£andparametersfromthestack.ŠPAGE<ŠLEA.L‚VIDBUF(PC),A2ˆSetupthedatabufferaddressesintheAŠMOVE.LA2,IOSSAD(A0)†IOCBtopointtotheVID(sector0)buffer.ŠLEA.L‚VIDBUFE(PC),A6ŠMOVE.LA6,IOSEAD(A0)ŠSPC„2CŠMOVE.W#IOREAD,IOSFCT(A0)ƒAttempttoreadsectorzeroofthedisk.ŠMOVE.W#IOPRAN,IOSOPT(A0)ŠCLR.L‚IOSRRN(A0)ŠTRAPƒ#2 ŠBEQ.S‚MNT045ŠSPC„2;ŠCMP.B‚#ISTANR,D0‹IftheattempttoreadtheVIDresultsin9ŠBEQ.L‚EXITERRŒadevicenotreadyerror,performanerror>MNT040„BRA.L‚MNTFORNŒexit.AnyotherI/Oerroristreatedasa*£foreigndisk.ŠSPC„2DMNT045„CMP.L‚#'EXOR',VIDMAC(A2)…Ifthesector0doesnotcontainthe7ŠBNE.S‚MNT040code'EXORMACS',thediskisnotVERSAdos@ŠCMP.L‚#'MACS',VIDMAC+4(A2)initializedsotreatitasaforeignŠBNE.S‚MNT040disk.ŠSPC„28ŠTST.L‚VIDVOL(A2)‹IfthevolumenamefieldoftheVIDis3ŠBEQ.S‚MNT040zero,treatthediskasforeign.This,*£situationcanoccuriftheSCRATCHutility)*£isusedonaVERSAdosinitializeddisk.ŠSPC„2>ŠLEA.L‚SCTREGS(PC),A3‡Obtaintherequestorslog-onusernumber;ŠMOVE.L10*4(A3),D1ˆpassedinA2oftheregisterspassedby#*£SCTwhenMOUNTstartedexecution.ŠSPC„2/ŠBEQ.S‚MNT050Iftherequestorisuser0orthe:ŠCMP.W‚VIDUSN(A2),D1†requestorslog-onusernumbermatches/ŠBEQ.S‚MNT050theusernumberofthediskowner(*£containedintheVID,proceedwiththe*£mount.ŠSPC„2<ŠLEA.L‚MSGIUSR(PC),A5‡IftherequestorisnotthediskownerBŠLEA.L‚MSGIUSRE(PC),A6„oruser0,issueanerrormessageandexit. ŠBRA„MSGEXITŠPAGECMNT050„LEA.L‚VDOSFLG(PC),A5‡Setaflagtoindicatethatthediskto,ŠST…(A5)bemountedisVERSAdosinitialized.ŠSPC„2CŠMOVE.LVIDCAS(A2),IOSRRN(A0)‚Checktheconfigurationareastarting8ŠBEQ.S‚MNTIPCDŽsectorpointerintheVID.Ifthepointer)*¥iszero,thereisnoconfigurationarea%*¥soskiptheconfigurationarearead *¥routine.ŠSPC„2:ŠLEA.L‚SECTBUF(PC),A3ŒThestartingsectoroftheconfigure9ŠMOVE.LA3,IOSSAD(A0)‹areahasalreadybeencopiedtothe;ŠLEA.L‚SECTBUFE(PC),A6‰RRNfieldoftheIOCB.Readthedisk9ŠMOVE.LA6,IOSEAD(A0)‹configurationareaintothebuffer..ŠTRAPƒ#2–Ifanerrorisreturnedfromtheread.ŠBNE.L‚EXITERR‘request,performanerrorexit.ŠSPC„29ŠTST.L‚IOSATM(A3)‹Ifthereisaconfigurationareaonthe5ŠBNE.S‚MNTCNFGŒdiskandtheattributesandparameters@MNTTYPEƒLEA.L‚MSGODSK(PC),A5…masksoftheconfigurationblockit@ŠLEA.L‚MSGODSKE(PC),A6„containsarebothzero,theconfiguration5ŠBRA„MSGEXITŒblockisempty.Thisconditionwillonly**£occuriftheuserisattemptingtomount-*£harddiskmediainitalizedonanIPCdrive.**¥Sincethereisnoplannedsupportforan-*£IPCtypeharddiskonanon-IPCcontroller,+*£anerrormessageisissuedantheutility*£isterminated.ŠPAGE6MNTIPCDƒCLR.L‚D2“Controlreachesherewhenthereisno<ŠMOVE.BVIDIPC(A2),D2†configurationareaonthedisk.Ifthe4ŠBEQ.L‚NOCNFGIPCdisktypeflag  intheVIDiszero,**£configurationdatamustbeobtainedfrom *£theuser.ŠSPC„25ŠSUB.B#1,D2‘IftheIPCdisktypefieldoftheVIDis=ŠCMP.B‚#MAXIPC,D2‰non-zero,thefieldshouldcontainanvalid6ŠBHI„MNTTYPEŒIPCdisktypecodesuppliedinanearlier+*£invocationoftheMOUNTutility.Theonly)*£validtypecodesatthistimeareaone**£forasinglesidedfloppyoratwofora,*£doublesidedfloppy.Ifthefieldcontains-*£anyothervalue,issueanerrormessageand *£terminate.ŠSPC„2:ŠMULUƒ#IOSDLN,D2‹Calculatetheoffsetintheconfiguration**£tableoftheentryfortheIPCdisktype*£specifiedintheVID.ŠSPC„29ŠLEA.L‚IPCTBL(PC),A3ˆLoadtheaddressinthetableofthe2ŠADD.L‚D2,A3Žconfigurationparameterblockforthe*£selectedIPCdisktype.ŠSPC„2CMNTCNFGƒMOVE.L#MSKDRIV,D1‹Fromthispointon,theoperationofthe3ŠBSR.L‚CONFIGutilityisthesameregardlessofthe2ŠBEQ.S‚MNT070sourceofthenewconfigurationdata+*£(i.e.fromthediskconfigurationareaor*£theIPCdisktable).**¥Calltheconfiguresubroutinetosetthe,*£mediarelatedattributesandparametersto'*£thecorrectvaluesforthediskbeing *£mounted.ŠSPC„2ŠLEA.L‚MSGFMS(PC),A5†errormessagebutleavethediskmounted.=ŠLEA.L‚MSGFMSE(PC),A6…TheIPCdiskflagisclearedtoprevent5ŠBSR.L‚MSGOUTapossiblewritetotheVID.Thedevice$*£mnemoniciscopiedbacktotheFHS(*£parameterblocksothatthesuccessful,*£mountmessageisconsistentwiththeerror *£message.ŠPAGE>MNT090„LEA.L‚MSGMTOK(PC),A5‡Issueamessagethatthemountwas9ŠLEA.L‚MSGMTOKE(PC),A6„successful.IfaVERSAdosdiskwas@ŠMOVE.LFHSVOL(A0),(A5)„mounted,themessageincludesthevolume4ŠBSR.L‚MSGOUTnameofthedisk.Otherwisethedevice*£mnemonicisincluded.ŠSPC„2@ŠMOVE.L#IOSRSZB<<1,D1‡Calltheconfigurationdisplaysuborutine2ŠMOVE.LA3,A1Žtotelltheuserthetotalnumberof4ŠBSR.L‚DSPCNFGŒVERSAdossectorsonthem! ounteddisk.ŠSPC„2?ŠMOVE.BIPCFLG-PBA(A4),D1ˆIftheIPCdisktypeflagisnotset,0ŠBEQ.S‚EXITaVERSAdosdiskhasbeenmountedbut**£inputfromtheuserwasrequired.Ifthe)*£userspecifiedthatthediskwasanIPC-*£initialized,singleordoublesidedfloppy,$*£theflagissetsotheVIDwillbe,*£rewrittentoincludethedisktypecodein*£theVIDIPCfield.ŠSPC„2>ŠMOVE.BVIDIPC(A2),D1ˆUpdatetheleastsignificantbyteofthe@ŠEOR.B‚D1,VIDCHK+1(A2)„VIDchecksumtoaccountforthenewvalue*£oftheVIDIPCfield.ŠSPC„27ŠLEA.L‚IOSBLK(PC),A0ŒPutthestartandendaddressesof3ŠMOVE.LA2,IOSSAD(A0)ŠtheVIDbufferintotheIOCB.ŠLEA.L‚VIDBUFE(PC),A6ŠMOVE.LA6,IOSEAD(A0)ŠSPC„2CŠMOVE.W#IOWRIT,IOSFCT(A0)ƒSincetheIPCdisktypefieldintheVID<ŠCLR.L‚IOSRRN(A0)‰nowcontainstheappropriatetypecodeforBŠMOVE.W#IOPRAN,IOSOPT(A0)thedisk,writeoutthenewVIDsothat.ŠTRAPƒ#2‘thediskcanbeautomaticallymountedŠBEQ.S‚EXITinthefuture.ŠSPC„24ŠBSR.L‚EMHOUTIfthenewVIDcouldnotbewrittento@ŠLEA.L‚MSGVIDW(PC),A5…thedisk,callEMHtooutputtheI/Oerror=ŠLEA.L‚MSGVIDWE(PC),A6„message.Alsooutputamessagestating8ŠBSR.L‚MSGOUTthattheVIDcouldnotbeupdatedtoallow*£automaticconfiguration. 7EXIT†ERQ.TERM#0,#0ŽPerformanormalterminationwitha%*£zeroterminationcodeinD0andA0.5ŠTTLVdosMountUtilityV4.01(ConfigureSubroutine)ŠPAGE M*******************************************************************************šConfigureSubroutine*š-------------------*H*ƒThissubroutineissuesaconfigureorconfiguredefaultrequesttotheM* driver using the parameter block pointed to by A3. The supported attributesM* and parameters masks are obtained from the current configuration pointed toN* by A1 and are masked by the contents of D1.L so that the calling routine canO* control which of the configuration values are changed. The subroutine returnsK* immediately following the completion of the trap 2 so that error handling&* may be performed by calling routine.*A*‰Entryconditions:A0=ƒAddressoftheIOSparameterblocktobe-*¡usedfortheconfigureorconfiguredefault *¡request.-*›A1=„Addressofaconfiguredatablockthat%*¡containsthecurrentconfiguration.**›A3=„Addressoftheconfiguredatablock#*¡containingthenewconfiguration.0*›D1(bits16-31)=‚Themaskofattributestobe*­changedbytherequest./*›D1(bits0-15)‚=‚Themaskofparameterstobe*­changedbytherequest.*=*‰Exitconditions:‚D0=„Statusreturnedfromtheconfigureor*¡configuredefaultrequest.*#*£Allotherregistersarepreserved*N****************************************************************************** @CONFIG„MOVE.W#IOCNFG,IOSFCT(A0)ƒSettheIOSfunctioncodefora!ŠBRA.S‚CONF010Œconfigurerequest.ŠSPC„2ACONFIGDƒMOVE.W#IOCHDC,IOSFCT(A0)ƒSettheIOSfunctioncodefora*£configuredefaultrequestŠSPC„2KCONF010ƒMOVE.LIOSATM(A1),IOSATM(A3)‚Copythemasksofsupportedattributes**¥andparametersobtainedwiththecurrent)*¥configurationstatusintocorresponding'*¥fieldsinthenewconfigureparameter*¥block.ŠSPC„2=ŠAND.L‚D1,IOSATM(A3)ˆForcetozeroallbitsintheattributes**£andparametersmaskofthenewconfigure+*£parameterblockthatdonotcorrespondto,*£valuesthatdescribethemedia.Thevalues,*£thatcorrespondtothezeroedbitswillbe *£unchanged.ŠPAGE<ŠMOVE.LA3,IOSDBP(A0)ŠIssueaconfigureorconfiguredefaultAŠMOVE.W#IOPCONLY,IOSOPT(A0)requestusingtheconfigurationblock1ŠTRAPƒ#2“pointedtobyA3.Ifaconfigurerequest+*¥isperformed,theoptionsaresetsothat&*¥neitheramountnordismountoccurs.ŠSPC„2ŠBEQ.S‚CONF020ŠCMP.B‚#ISTADNM,D0ŠBNE.S‚CONF020 ŠCLR.B‚D0ŠSPC„2 CONF020ƒRTS8ŠTTLVdosMountUtilityV4.01(UserAssistedConfigure)ŠPAGEM******************************************************************************%*“UserAssistedConfigurationRoutine%*“-------! -------------------------*H*ƒThisroutineiscalledwhenaVERSAdosdiskistobemountedthatdoesN* not contain a configuration area and has a IPC disk type code of zero in theN* VID. If the disk to be mounted is a floppy, the user is asked if the disk isM* an IPC format single or double sided disk. If the user responds with an 'S'L* for single sided or with a 'D' for double sided, the appropriate disk typeI* code is written in the VID and control is transfered to the routine forM* mounting an IPC type disk. If the responds with a CR only or if the disk toI* be mounted is not a floppy, the user is prompted for configuration data=* by the same routine that is called to handle foreign disks.*M***************************************************************************** BNOCNFG„CMP.B‚#XDSFDK,IOSDTP(A1)ƒIfthedisktobemountedisnota6ŠBNE.S‚MNTFORNŒfloppy,don'taskifitisanIPCdisk.ŠSPC„2GNOCNFG10‚LEA.L‚QIPCFPY(PC),A5‡Asktheuserifthedisktobemountedis;ŠLEA.L‚QIPCFPYE(PC),A6„anIPCformatsingleordoublesidedŠBSR.L‚OUTWINPŒfloppy.ŠSPC„29ŠCMP.B‚#CR,(A5)IftheresponseisaCRonly,treatitasŠBEQ.S‚MNTFORNŒan'N'response.ŠSPC„28ŠCMP.B‚#CR,1(A5)ŒIfthesecondcharacteroftheresponse5ŠBNE„NOCNFG10‹isnotaCR,theresponseisinvalidso*£re-askthequestion.ŠSPC„22ŠCMP.B‚#'N',(A5)ŒIftheresponseisa'N',request9ŠBEQ.S‚MNTFORNŒconfigurationinformationfromtheuseras*£isdoneforforeigndisks.ŠSPC„2>ŠMOVE.B#SSFPY,VIDIPC(A2)„Iftheresponseisan'S'forsingle9ŠCMP.B‚#'S',(A5)Šsided,settheIPCdisktypecodeinthe:ŠBEQ.S‚NOCNFG20‹VIDandpreparetoreturntotheautomatic*£mountsequence.ŠSPC„2BŠMOVE.B#DSFPY,VIDIPC(A2)„Iftheresponseis'D'fordoublesided,5ŠCMP.B‚#'D',(A5)ŠsettheIPCdiskcodeintheVIDand7ŠBNE„NOCNFG10‹preparetoreturn.Iftheresponseisnot(*£'S','D','N',orCR,itisinvalidso*£re-askthequestion.ŠPAGECNOCNFG20‚LEA.L‚IPCFLG(PC),A5ˆSettheIPCtypediskflagsothatthe2ŠST…(A5)IPCdisktypecodewillbewrittentothe8ŠBRA„MNTIPCDŒVIDbeforetheutilityterminates.Transfer,*£controltotheautomaticmountroutinefor *£IPCdisks.3ŠTTLVdosMountUtilityV4.01(MountForeignDisk)ŠPAGE M*******************************************************************************—MountForeignDiskRoutine*—-----------------------*H*ƒThisroutinerequestsconfigurationinformationfromtheuserwhentheB* disk to be mounted is foreign or is a VERSAdos disk for which noM* configuration information is available. The modify configuration subroutineN* is called to permit the user to make changes in the media related attributesL* and parameters that are supported by the driver. The current configurationL* values are used for any attributes or parameters that the user chooses not * to change.J*ƒAftertheuserhasmadeanydesiredchangestotheconfigurationdata,aJ* configure request is made to the driver. If the driver returns an error,N* an error message is issued and the modify configuration subroutine is calledM* again. If the configure request is successful, the validation subroutine isI* called to attempt to read the last sector. If the subroutine returns anO* error, the configuration is assumed to be faulty and the modify configuration* subroutine is called again.G*ƒIfconfigurationhasbeenverified,controlistransferedbacktothe* automatic mount sequence.*N****************************************************************************** FMNTFORNƒMOVE.LIOSATM(A1),D1ˆCallthedisplayconfigurationsubroutine0ŠBSR.L‚DSPCNFGŒtoshowthecurrentvaluesofall$*£attributesandparametersthatare*£supportedbythedriver.ŠSPC„2=ŠLEA.L‚MSGNCFG(PC),A5‡Sendamessagetothelogoutputdevice:ŠLEA.L‚MSGNCFGE(PC),A6„thatthereisnoconfigurationdata3ŠBSR.L‚MSGOUTavailableforthedisktobemounted.ŠSPC„2AMNTF10„MOVE.L#MSKDRIV,D1ŠLoadavaluethatistobeANDedtothe,*£attribut" esandparametersmaskstoprevent(*£driverelatedconfigurationdatatobe*£viewedorchanged.ŠSPC„2?ŠCMP.B‚#XDSRDK,IOSDTP(A1)ƒIfthedevicebeingmountedisahard3ŠBNE.S‚MNTF15disktheconfigurationattributesfor=ŠAND.W‚#-MSKUNATM,D1†trackanddatadensity,formattype,and**£numberofsidesdonotapply.Thesebits(*£aremaskedsothatthisdatacannotbe*£viewedorchanged.ŠSPC„2?MNTF15„AND.L‚IOSATM(A1),D1ˆMaskoutthebitsforattributesand7ŠBSR.L‚MODCNFGŒparametersthatarenotsupportedbythe'*£driverofthedevice.Callthechange)*£configurationroutinetoallowtheuser *£tomodifytheapplicabledata.ŠPAGE4ŠMOVE.LA1,A3Attempttoconfigurethedeviceasthe.ŠBSR„CONFIGuserspecified.SetA3sothatthe7ŠBEQ.S‚MNTF20configuresubroutinewillusethecurrent'*£configurationparameterblock.Ifthe+*£configurationisrejected,issueanerror *£message.ŠSPC„26ŠBSR.S‚CONFGERRIssueaconfigurationerrormessageto1ŠBRA„MNTF10thelogoutputdeviceandsolicitnew**£configurationinformationfromtheuser.ŠSPC„26MNTF20„BSR.S‚CNFGCHKŽValidatethenewconfigurationby7ŠBEQ„MNTCFGOK‹attemptingtoreadthelastsectorofthe,*£disk.Ifnoerrorisreturnedontheread,(*£returntotheautomaticmountsequence'*£followingconfigurationverification.ŠSPC„26ŠBSR.L‚EMHOUTCalltheerrormessagehandlertoinform**£theuseroftheerrorthatresultedfrom*£theconfigurationattemptŠSPC„2>ŠLEA.L‚MSGBCFG(PC),A5‡ThelastsectorofthediskcouldnotbeAŠLEA.L‚MSGBCFGE(PC),A6„readsotheconfigurationisassumedtobe/ŠBSR.L‚MSGOUTfaultysoissueanerrormessage.ŠSPC„2@ŠMOVE.L#IOSRSZB<<1,D1‡Displaythenumberofsectorsreturnedby7ŠBSR.L‚DSPCNFGŒtheconfigurerequesttogivetheusera5ŠBRA„MNTF10possibleclueastowhytheconfiguration+*£checkfailed,andloopbacktoobtainnew*£configurationdata.0ŠTTLVdosMountUtilityV4.01(ConfigureDrive)ŠPAGEN********************************************************************************”ConfigureDriveRoutine*F*ƒThisroutineiscalledwhentheuserspecifiesthe'D'optionontheL* invoking command line. This user zero restricted option, allows any of theG* configuration attributes or parameters to be changed by the user. TheL* configuration modification subroutine is called to allow the user to setupL* the desired configuration. The basic for the changes is always the defaultN* configuration but since this routine is called only for a dismounted device,;* the default and current configurations will be identical.*K*ƒAftertheuserhasmadethedesiredchangestotheconfigurationdata,anL* attempt is made to update both the current and default configurations withN* this data. If an error is returned on either configuration attempt, an errorO* message is issued and new data is solicited from the user. When both requests1* are sucessful, the utility terminates normally.*@*‰Entryconditions:A1=Addressofaconfiguredatablockthat%* containsthecurrentconfiguration.7*‰Exitconditions‚:Theroutineterminatestheutility.*N****************************************************************************** DCONFGDRV‚LEA.L‚SCTREGS(PC),A2‡Obtainthelogonusernumberpassedby?ŠMOVE.L10*4(A2),D1ˆSCTinA2atthestartofexecution.Ifthe6ŠBEQ.S‚CFGD010Œusernumberisnotzero,issueanerror *£message.ŠSPC„2<ŠLEA.L‚MSGZERO(PC),A5‡Issuetheerrormessageforanon-zero=ŠLEA.L‚MSGZEROE(PC),A6„usernumberandterminatetheutility. ŠBRA„MSGEXITŠSPC„24CFGD010ƒMOVE.LA1,A3Movetheaddressofthecurrent<ŠMOVE.LIOSATM(A3),D1†configurationblocktoA3andthemask(*£ofsupportedparameterstoD1tosetup,*£forthecalltotheconfiguremodification *£subroutine.ŠSPC„28ŠBSR.L‚DSPCNFGŽCalltheconfigurationdisplaysubroutine**£toshowthecurrentvaluesofattributes**£andparametersthataresupportedbythe *£driver.ŠSPC„2CŠAND.W‚#-(1<" CFGDERRƒBSR.S‚CONFGERRCalltheconfigurationerrorsubroutine3ŠBRA.S‚CFGD020Œtoissueanerrormessagetothelog-*£outputdeviceandsolicitnewconfiguration*£datafromtheuser.?ŠTTLVdosMountUtilityV4.01(ConfigureErrorMessageOutput)ŠPAGEN*******************************************************************************/*ConfigurationErrorMessageOutputSubroutine*F*ƒThissubroutinesendsanerrormessagetothelogoutputdevicethatH* the configuration error code returned in the configure data block. TheL* Error Message Handler is not used for this error because it currently doesA* not provide a way to display the configuration error code data.*C*‰Entryconditions:A3=ƒAddressoftheconfiguredatablockwhich*¡returnedtheerror./*‰Exitconditions‚:‚Allregistersarepreserved*M***************************************************************************** HCONFGERR‚MOVEM.LD0/A0/A5-A6,-(A7)ƒSaveallregistersusedonthestack.ŠSPC„2:ŠLEA.L‚MSGCERR(PC),A5‡Loadtheconfigurationerrormessage*£startaddress.ŠSPC„2=ŠLEA.L‚MSGCEC(PC),A0ˆLoadtheaddressofthefieldtocontain3ŠCLR.W‚D0‘theconfiguationerrorcodeonASII.Call=ŠMOVE.BIOSCEC(A3),D0†systemsubroutineBHWCVTtoconvertthe4ŠBSR„BHWCVTvaluetoASCIIhexadecimalandstorethe*£resultinthebuffer.ŠSPC„2:ŠLEA.L‚-1(A0),A6ŒLoadtheendaddressoftheerrormessage4ŠBSR.L‚MSGOUTandsendthemessagetothelogoutput *£device.ŠSPC„2?ŠMOVEM.L(A7)+,D0/A0/A5-A6ƒRestorethesavedresistersfromthe-ŠRTS—stackandreturntothecallingroutine.*‰INCLUDEDSKCFGCD.AIŠINCLUDEDSKCFGCD.AI7ŠTTLVdosMountUtilityV4.01(SymbolCross-Reference) ŠEND„MOUNT ééé=/*=/*†NOVALID.AF=/**=/* Chain file to assemble NOVALID utility=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to NOVALID.LS=/*=/IFC \1ƒ=ARGNOVALID.LS=/ENDIF=/*#=ASM NOVALID.SA,NOVALID.RO,\1;RZ=83=/*{ Included files are:=/*ƒ9995.&.USM.EQ=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.&.EXE.EQ=/*}=/*=ENDé# éééééU=/*=/*†NOVALID.LF=/*(=/* Link chain file to create NOVALID.LO=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to NOVALID.LL=/*=/IFC \1ƒ=ARGNOVALID.LL=/ENDIF=/*=LINK ,NOVALID.LO,\1;AHMIXATTRIBUTES D PSEG SEG0:0,14 $0000INPUT NOVALID.ROLIB 0.&.UTILIB.ROEND=/*=ENDéééééé^MNOVALID‚IDNT4,0‚8211031200INVALIDATEUSER(REMOVEENTRYFROMPASSWORDFILE) O*********************************************************************************ˆNOVALIDATEUSERUTILITY*<*ˆDELETES(INVALIDATES)ENTRIESFORUSERNUMBER(S)S# PECIFIED*ˆINTHEPASSWORDFILE.**>‡HBR8O*******************************************************************************‰PAGE‰NOLIST‰INCLUDE9995.&.USM.EQ‰INCLUDE9995.&.TR1.EQ‰INCLUDE9995.&.IOE.EQ‰INCLUDE9995.&.EXE.EQ‰LIST ‰SECTION0 ‰XDEFNVALID‰XREFASCVAL,CLASCODE PBA†EQU‡*‰DC.B'1220844'‰DS.B32STACK STACK„EQU*CMDBUFƒCOMLINE32"ASSIPAR‚DC.WFHASGN,FOPPW+FOPISK,1PASSNAME DC.L PWVOL ‰DC.WPWUSR!‰DC.LPWCAT1,PWCAT2,PWFIL1,PWFIL2)‰DC.WPWEXT,0,PWPROT,PWRECL,PWKSIZ,PWFBLK-DELETPAR DC.W IODELR,IOPBIN+IOPIMG+IOPRRN,1,0 O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>12/17/84>>*!*ˆDC.L0,CMDBUF,CMDBUF+PWRECL-1,0 ‰DC.L0,0,0,0*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<12/17/84<< ERRORPAR DC.L 0,0,$60005 O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>12/17/84>>**ERRPARAM DC.L 2,ERRORPARERRPARAM DC.L 2,0*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<12/17/84<< ‰PAGE*** NVALID EQU *‰LEA‡PBA(PC),A6*œA6=PROGRAMBASEADDRESS‰LEA‡CMDBUF-PBA(A6),A7"‰MOVE.L„A7,DELETPAR-PBA+IOSSAD(A6))*œESTABLISHPARAMETERBLOCKSTARTADDRESS‰LEA‡CMDBUF-PBA+PWRECL-1(A6),A7"‰MOVE.L„A7,DELETPAR-PBA+IOSEAD(A6)'*œESTABLISHPARAMETERBLOCKENDADDRESS‰LEA‡ERRORPAR-PBA(A6),A7‰MOVE.L„A7,ERRPARAM-PBA+4(A6)'*œESTABLISHEMHPARAMETERBLOCKADDRESS. LEA STACK-PBA(A6),A7 INITIALIZE STACK POINTER CMP.L #0,A2 CHECK USER NUMBER BEQ.S NVALID0 BRANCH USER =0+ MOVE.L #EM_PRIV,D0 PRIVILEGE ERROR MESSAGE BRA ERROROUT ERROR EXIT NVALID0 EQU *8 LEA CMDBUF-PBA(A6),A0 SET POINTER TO INPUT COMMAND LINE MOVE.L A0,A3 ALSO SAVE ITgIpHx 0 LEA CLASCODE(PC),A4 CHARACTER NVALIDATION TABLE/ BSR.S BOUNDARY GET LOWER (OR ONLY) USER NUMBER MOVE.L D3,D4 SAVE LOWER BNE.S NVALID2 NOT USER = 0% MOVE.L #EM_NUSER,D0 INVALID USER NO. BRA ERROROUT ERROR EXIT NVALID2 EQU * CMP.B #$D,D1 END OF LINE?- BEQ.S NVALID10 YES LOWER IS ONLY USER NUMBER. BSR.S BOUNDARY GET UPPER BOUNDARY USER NUMBER NVALID5 EQU *% CMP.L D4,D3 CHECK UPPER IS NOT LOWER BCC.S NVALID10 OK+ MOVE.L #EM_RVRSE,D0 SEQUENCE ERROR MESSAGE BRA.S ERROROUT ERROR EXITNVALID10 EQU *. LEA ASSIPAR-PBA(A6),A0 ASSIGN PARAMETER BLOCK TRAP #3& BEQ.S NVALID20 BRANCH ASSIGNMENT GOOD8 CMP.B #FSTAAP,D0 FILE IN USE (ACCESS PERMISSION ERROR)? BNE.S ERROROUT ERROR EXIT MOVE.L #DELAY,D0 DELAY COMMAND MOVE.L #167,A0 167 MILLISECONDS TRAP #1 BRA NVALID10 TRY AGAINNVALID20 EQU *, MOVE.L A3,A0 REFETCH COMMAND BUFFER ADDRESSNVALID22 EQU *‰LEA‡CMDBUF-PBA+PWRECL(A6),A5 CMP.L A5,A0 DONE? BEQ.S NVALID25 YES CLR.B (A0)+ " BRA NVALID22 CONTINUENVALID25 EQU *! MOVE.L D4,(A3) USER NUMBER (KEY)NVALID30 EQU *A LEA DELETPAR-PBA(A6),A0 WRITE NEW RECORD PARAMETER BLOCK ADDRESS TRAP #2 BEQ.S NVALID40 BRANCH GOOD& CMP.B #ISTARN,D0 CHECK DOES NOT EXIST" BEQ.S NVALID40 OK, DOES NOT EXIST BRA.S ERROROUT ERROR EXITNVALID40 EQU *% ADD.L #1,D4 INCREMENT LOWER BOUNDARY CMP.L D4,D3 TEST DONE BCC NVALID25 BRANCH MORE CLR.L D0 RESET UPPER HALF" MOVE.L #0,A0 CLEAR ABORT REGISTERNVALIDBYE EQU *" MOVE.W #TERM,D0 TERMINATE COMMAND TRAP #1 DONE!!!**ˆ**BOUNDARYSUBROUTINE*BOUNDARY EQU *0 BSR ASCVAL CONVERT ASCII STRING TO BINARY VALUE TST.B D2 FIELD TERMINATOR? BMI.S BOUNDVAL OK, GO TEST SIZE CMP.B #'-',D1 DASH SEPARATOR? BEQ.S BOUNDVAL OK, GO TEST SIZE, MOVE.L #EM_NOCVT,D0 NUMBER CONVERSION ERROR BRA.S BOUNDERR ERROR EXITBOUNDVAL EQU * CMP.L #9999,D3 TEST SIZE BLS.S BOUNDARZ BRANCH OK' MOVE.L #EM_VSIZE,D0 SIZE ERROR MESSAGEBOUNDERR EQU * ADD.L #4,A7 POP RETURN BRA.S ERROROUT ERROR EXITBOUNDARZ EQU * RTS*$ ERROROUT EQU *7MOVEM.LD0/A0,ERRORPAR-PBA(A6)ŒSAVEMESSAGEPARAMETERSD MOVEM.L ERRPARAM-PBA(A6),D0/A0 SET UP CALL TO ERROR MESSAGE HANDLER TRAP #4 OUTPUT MESSAGE? MOVE.L ERRORPAR-PBA(A6),A0 ERROR CODE IN DO BECOMES ABORT CODE& MOVE.L ERRORPAR-PBA(A6),D0 ERROR CODE/ BSET #14,D0 DIAGNOSTIC BIT TO ABORT CHAIN MODE) SWAP D0 POSITION FOR DIAGNOSTIC REGISTER BRA NVALIDBYE TERMINATE* END NVALIDéééééé=/* =/*†PATCH.AF=/*(=/* Chain file to assemble PATCH utility=/*:=/* If no output argument is specified for the listing the'=/* chain file will default to PATCH.LS=/*=/IFC \1ƒ=ARGPATCH.LS=/ENDIF=/*&=ASM PATCH.SA,PATCH.RO,TEMP1.LS;RZ=100=/*{ Included files are:=/*ƒ9995.&.FME.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.&.TR1.EQ=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;Y=/*5=ASM‚PATCH.CODE68M.SA,PATCH.CODE68M.RO,TEMP1.LS;RZ=86=/*{ Included files are:=/*ƒ--none--=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;A=/*/=ASM‚PATCH.MBSR.SA,PATCH.MBSR.RO,TEMP1.LS;RZ=86=/*{ Included files are:=/*ƒ--none--=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;A=/*7=ASM PATCH.DCODE68M.SA,PATCH.DCODE68M.RO,TEMP1.LS;RZ=86=/*{ Included files are:=/*ƒ--none--=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;Aƒ=COPYTEMP2.LS,\1;Yƒ=DELTEMP1.LS;Yƒ=DELTEMP2.LS;Y=/*=ENDéééé$ €.=/* =/*†PATCH.LF=/*&=/* Link chain file to create PATCH.LO=/*:=/* If no output argument is specified for the listing the'=/* chain file will default to PATCH.LL=/*=/IFC \1ƒ=ARGPATCH.LL=/ENDIF=/*=LINK ,PATCH.LO,\1;AHMIX ATTRIBUTES PSEG SEG0:0-15 $0INPUT PATCH.ROIN„PATCH.CODE68M.ROIN„PATCH.MBSR.ROINPUT PATCH.DCODE68M.ROLIB 0.&.UTILIB.ROEND=/*=ENDééééé鉊PAGEPATCH…IDNTƒ100,4B******************************************************************%***********PATCHUTILITY***********.*ƒORIGINALREV.1.0307JAN81(TB59)STEVEBALL*+*ƒPURPOSE:‚ALLOWONETOPATCHALOADMODULE*=*ƒOPTIONS:‚P-DEFINESPROCESSORTYPEFORTHELOADMODULE‰1,4,*‘BEINGMODIFIED.‚DEFAULTSTOTHE68000.Œ1,4*B*******************************************************************‰PAGE***ˆINCLUDEFILES***ˆINCLUDE9995.&.FME.EQ*ˆINCLUDE9995.&.IOE.EQ*ˆINCLUDE9995.&.TR1.EQ**‰NOLIST‰INCLUDE9995.&.FME.EQ‰INCLUDE9995.&.IOE.EQ‰INCLUDE9995.&.TR1.EQ‰LIST**‰PAGE****ˆPATCH‚MODIFICATIONHISTORY**ˆREVISIONCODE‡01168547*’ModuleDCODE68Mchangedtooutputthedisplacementof#*’theMOVEPinstructionindecimal.**ˆREVISIONCODE‡1220844"*’FORCEPOSITIONINDEPENDENTCODE.**ˆREVISIONCODE‡11128446*’UPGRADE1-LINEASSEMBLER/DISASSEMBLERTOHANDLELOAD2*’MODULESFORTHE68010PROCESSOR.‚THISALSOFIXES4*’THEBUSERRORWHICHOCCUREDWHENALINEFEEDALONE8*’WASENTEREDASINPUTWHENINTHE;DIMODE(SPR#1070).**ˆREVISIONCODE‡02198235*’MODIFY1-LINEDISASSEMBLERTOCORRECTLYDISASSEMBLE*’MOVEMANDSUBINSTRUCTIONS.***ˆREVISIONCODE‡12188137*’MODIFYERRORMESSAGEHANDLERLOGICTOTERMINATECHAIN5*’FILEIMMEDIATELYUPONERROR.‚ADDED'INVALIDOPTION'4*’ERRORMESSAGE.‚CHANGEINPUTFILECHECKSTONOT(!)6*’REQUIREEXTENSIONOF.LOOR.SY,ANDTOREQUIREFILE5*’TYPETOBEC% ONTIGUOUS.‚REPLACESTHEARROWCHARACTER4*’($0C)WITHASPACEONASSEMBLYLANGUAGELINES.‚BUG$*’FIXESINASSEMBLER&DISASSEMBLER.**ˆREVISIONCODE‡10288135*’CONTAINSASSEMBLY/DISASSEMBLYOPTIONFORMCOMMAND.4*’COMMENTLINEINMMODENOLONGERADVANCESPOINTER.**ˆREVISIONCODE‡0910813 *’CONTAINSERRORMESSAGEHANDLER$*’CONTAINSPOSITIONINDEPENDENTCODE-*’CONTAINSCURRENTREVISIONCODEMODIFICATION5*’CONTAINSTERMINATIONLOGICFORUSEWITHCHAINFILES ’J›F£V«t³E»IÃHË>ÓCÛBãRë@óEû;5 ;9J#W+<3S;bC'1*’CONTAINSCOMMONSUBROUTINESPULLEDFROMLIBRARY*’USESTHE'SBARG'ROUTINE3*’CONTAINSTHEADDEDCHARACTERSPACEFOR'SBARG'TO*œPLACEA'CR'6*’WILLACCEPTHEXINPUTWITHORWITHOUTTHEPRECEEDING(*œ$WHICHNORMALLYACCOMPANIESHEXINPUT5*’IFANOFFSETHASBEENIDENTIFIEDTHENALLADDRESSES**œEXAMINEDINTHEDISPLAY/CHANGEMODEWILL,*œSHOWBOTHTHEREQUESTEDANDOFFSETADDRESS7*’THE'HELP'REQUESTWILLSHOWTHOSECOMMANDS‚AVAILABLE*œFORTHEPATCHUTILITY**‰PAGE6ŠXREFƒEDITFILE,OPTION,PARSE,SBARG,DCODE68M,CODE68Mˆ1,4* ŠSECTIONƒ0* PBA†EQU‡* REV_CODE:‰DC.B†'0116854'¨1,4&*œWHEREREV_CODEISDEFINEDASFOLLOWS *œMMDDYYXZ*3*œMMDDYY=MONTHDAYYEAROFLASTASSEMBLYORPATCH*œX†=REVISIONTYPECODE*¦SPACE=CLEANASSEMBLY *¦P…=PATCHED*¦C…=CUSTOMIZEDPATCHED**#*œZ†=VERSADOSMAJORREVISIONFIELD*ŠDS.Wƒ100‹STACKAREA STACK…EQU…**,INITDREG‚EQU…*ŒD-REGSSAVEDONINITIALENTRY+STSKNAMƒDS.L„1ŒD0=TASKNAMETHATSTARTEDME/SESNUM„DS.L„1ŒD1=SESSIONNUMBERTHATSTARTEDME$VOLNAM„DS.L„1ŒD2=DEFAULTVOLUMENAME%USERNUMƒDS.L„1ŒD3=DEFAULTUSERNUMBER'CATNAM„DS.L„1ŒD4=DEFAULTCATALOGUENAME-ŠDS.L„1ŒD5=2NDHALFOFDEFAULTCATALOGUENAME*CCOUNT„DS.L„1ŒD6=#OFCHARSINCOMMANDLINE#LOGUNTSƒDS.L„1ŒD7=LOGICALUNITMASK**CLINE…COMLINE$A0ŠCOMMANDLINE*(INPLUN„EQU…1ŒASSOCIATEDWITHINPUTFIELD,SEGSRT„EQU…56‹OFFSETTOSEGMENTSTARTDESCR."SEGLGH„EQU…60‹OFFSETTOSEGLENGTHCR‡EQU‡$0D‡CARRIAGERETURNLF‡EQU‡$0A‡LINEFEEDSPACE„EQU.B…''‡SPACE&ARROWCHREQU‡$0C‡RIGHTARROWCHARACTER**&TERMCHRƒDC.B„'Q'ŠTERMINATIONCHARACTERBASM_MNEM‚DC.B„0ŠFLAGINDICATINGWHETHERASSEMBLY/DISWASREQUESTED**‰DS.W…00DECNUM„DC.L„-1‹BINARYNUMBERINPUTFROMOPERATORSAVDEC„DS.L„1ŒSAVEFORDECNUM&MODEC…DC.L„$F‹MODE(0=INCHANGEMODE).INCNUM„DC.L„0ŒINCREMENTFORUPORDOWNDISPLAY'PARSAREG‚EQU…*ŒSAVEREGSFROMPARSE–1,45OPTPSRTƒDS.L„1ŒA1=OUTPUTFIELDADDRESSFROMPARSEˆ1,45OPTSRT„DS.L„1ŒA2=OPTIONSFIELDADDRESSFROMPARSE‡1,4"EDITRTNƒDS.L„1ŒSAVEREGSFROMEDIT(GETIDXIX‚DS.L„1ŒINDEXINTO‚CHANGEBUFFER/GETIDXNM‚DS.L„1ŒVALUETOPUTINTOCHANGEBUFFER&RSECT…DS.L„1ŒFORGETIDXSECTORPOINTER7CHGED…DC.L„$F‹CHANGEDBUFFERFLAG(NONZERO=NOTCHANGED)-BCKSM…DC.W„0ŒCHECKSUMACCUMULATORBEFOREVALS,ACKSM…DC.W„0ŒCHECKSUMACCULULATORAFTERVALS4QFIRST„DS.L„1ŒFIRSTPASSFLAGFORSTRINGCONVERSIONS2QSAVA0„DS.L„2ŒSAVEFORA0-A1ONSTRINGCONVERSIONS7STGCHR„DS.W„1ŒSAVEFORCHARACTERONNUMERICSTRINGCONV1OFFSET„DC.L„0ŒHOLDSCURRENTOFFSET(ADDRESSBIAS)BPTYPE…DC.L„$68000‡HOLDSCURRENTPROCESSORTYPE(DEFAULT=68000)1,42PCODE…DC.L„0ŒHOLDSCURRENTPROCESSORTYPECODEŒ1,4*ž0=68000¤1,4*ž4=68008¤1,4*ž8=68010¤1,42*žC=68020(FUTURENOTIMPLEMENTEDYET!!!!!!)1,4 MSG_ADDR:‰DC.L†0-*œSTARTADDROFMSGCONTAININGUSERSPECIFIED*œCHANGEREQUEST*‰DS.W†0** PARAMETER TABLES*4* ASSIGN INPUT LU TO DEVICE SPECIFIED ON INPUT FIELD*ŠFHS.INPFHASGN,FOPEREW,INPLUN** OUTPUT MESSAGE*ŠIOS.MSGŽIOWRIT,IOPIMG,LDFLUN** INPUT MESSAGE* ŠIOS.MSGIIOREAD,,CDFLUN,,,0,0,0** DISK INPUT/OUTPUT*OPT‡EQU…IOPIMG+IOPBLK+IOPRAN OUTIOS„EQU…* IOS.INPƒ0,OPT,INPLUN,0,,0,0,2566INSEC„EQU‡INPIOS+IOSRRN‡SECTORTHAT'SINCHANGEBUFFER*‰PAGE*% * * BUFFERS*‰DSˆ07OPIN_ASMDC.B†'‚'†SPACESREQUIREDBYONE-LINEASSEMBLER OPIN†EQU…*(OPINS…DS.B„100ŠOPERATORKEYINPUTBUFFEROPIN_SIZEQU‡*-OPIN OPINE…EQU…*-1"‰DS.W†2‰REQUIREDFORSBARGROUTINE**2DUMMY…DS.B„80‰DUMMYBUFFERFORONE-LINEASSEMBLER.**CSECT…EQU…*ŒFORCONTROLSECTOR ŠDS.B„256CSECTEƒEQU‡*-1/MEMIMGDƒEQU…CSECT+176„STARTOFMEMIMAGEDESCR.* CHGBUF„EQU…*ŠDS.B„256ŠHOLDSCHANGEBUFFER*‰DS.W…02CODE_BUFDS.B…10‰HOLDSASSEMBLER/DISASSEMBLERDATA‰PAGE** * MESSAGES*‰DSˆ0;OVMSGSƒDC.B†'WORKBUFFEROVERFLOW--TOOMANYOFFSETS?',CR,LFOVMSGEƒEQU‡*-1*‰DSˆ08ODDADDRSDC.B†'INSTRUCTIONADDRESSESMUSTBEEVEN',CR,LFODDADDREEQU‡*-1*‰DSˆ04SYNTMSGSDC.B†'ASSEMBLYLANGUAGESYNTAXERROR',CR,LFSYNTMSGEEQU‡*-1 ŠDS†0*5DVASGMSƒDC.B„'INPUTFILEMUSTBEALOADMODULE',CR,LFDVASGMEƒEQU…*-1ŠDS†0*NOADDRSƒDC.B„'INVALIDADDRESS' ŠDC.B„$0D ŠDC.B„$0ANOADDREƒEQU…*-1ŠDS†0*"QUOTERRS‚DC.B„'QUOTESTRINGERROR' ŠDC.B„$0D ŠDC.B„$0AQUOTERRE‚EQU…*-1ŠDS†0*OFSMS…DC.B„'OFFSET=‚'ODSPM…DC.B„'ˆ' ŠDC.W„$0D0A OFSME…EQU…*-1ŠDS†0**OFFSEGS‚DC.B†'ENDOFMEMORYIMAGEREACHED' ‰DC.B†$0D ‰DC.B†$0AOFFSEGE‚EQU‡*-1ŠDS†0*CKSMS…DC.B„'CHECKSUM=‚' CKSMV…DC.B„'ˆ'ƒHOLDSASCIIVALUE ŠDC.B„$0D ŠDC.B„$0A CKSME…EQU…*-1ŠDS†0*"PROCMSGS‚DC.B„'PROCESSOR='¥<1.4 PROCV…DS.B„8 ŠDC.W„$0D0APROCMSGE‚EQU…*-1ŠDS†0*OFSTS…DC.B„'OFFSET„=' OFSTV…DS.B„8 ŠDC.W„$0D0A OFSTE…EQU…*-1ŠDS†0*HEADINGƒDC.B„'PATCHVERSIONƒ'VERSIONƒDS.B„8 ŠDC.W„$0D0AHEADINGE‚EQU…*-1ŠDS†0*(OPERMSGS‚DC.B„'INVALIDOPTIONSPECIFIED' ŠDC.W„$0D0AOPERMSGE‚EQU…*-1 ŠDS†0²1.4>*PROMPTCƒDC.B„'>'PROMPTCE‚EQU…*-1*‰DSˆ0A_PRMPT‚DC.B†'¨>'A_PRMPTEEQU‡*-1*‰DSˆ0 CHGAOUTS:‰DS.L†2(*œMODIFICATIONADDRESSPLUSOFFSETVALUE ‰DC.B†'‚')ADRAOUTƒDS.L„2ŒHOLDSMODIFICATIONADDRESS ŠDC.B„'‚'VALAOUTƒDS.W„1ŒHOLDSVALUE ŠDC.B„'‚' ŠDC.B„'' ŠDC.B„''''QAOUT…DS.B„1ŒHOLDSASCIIVALUE ŠDC.B„'''' ŠDC.B„'ƒ'CHGAOUTE‚EQU…*-1ŠDS†0X00100: ‰DC.B†CR,LF‰DC.B†'PATCHREVISIONCODE'X00110: ‰DC.B†'ˆ' ‰DC.B†CR,LF‰DC.B†'PATCHCOMMANDS'‰DC.B†CR,LF,LF'‰DC.B†'M(orMM)=DISPLAY/CHANGEMODE' ‰DC.B†CR,LF‰DC.B†'ƒM' ‰DC.B†CR,LF‰DC.B†'†MODE1ƒ' ‰DC.B†CR,LF‰DC.B†'†MODE2ƒ<^>' ‰DC.B†CR,LF)‰DC.B†'†MODE3ƒ<',$27,'c...c',$27,'>' ‰DC.B†CR,LF,‰DC.B†'†MODE4ƒ<',$27,'c...c',$27,'><^>' ‰DC.B†CR,LF‰DC.B†'†MODE5ƒ' ‰DC.B†CR,LF‰DC.B†'†MODE6ƒ.'‰DC.B†CR,LF,LF‰DC.B†'ƒM;DI' ‰DC.B†CR,LF3‰DC.B†'†MODE1ƒ' ‰DC.B†CR,LF‰DC.B†'†MODE2ƒ' ‰DC.B†CR,LF‰DC.B†'†MODE3ƒ.'‰DC.B†CR,LF,LF‰DC.B†'O=OFFSET' ‰DC.B†CR,LF‰DC.B†'ƒO'‰DC.B†CR,LF,LF‰DC.B†'QUITORQ'‰DC.B†CR,LF,LF X00198ƒEQU‡*-X00100‚MESSAGESIZEX00199ƒEQU‡*-1‡ENDMESSAGEADDR‰PAGEJ***************************************************************************'*ERRORMESSAGEHANDLERPARAMETERBLOCK0*‹PRESETFORINPUTFROMCDFLUN,OUTPUTTOLDFLUN*J************************************************************************** ‰DSƒ0EM_PBLK: BEM_D0„DC.L‚0‡D0-IOS/FHSRETURNERRORSTATUS‚(ERRORMSGKEYVALUE)=EM_A0„DC.L‚0‡A0-ADDROFI/OPARAMETERBLOCK‚(IFAPPLICABLE)EM_OPTƒDC.B‚0‡OPTIONSFLAG*­BIT‡MEANINGIFSET*®0ˆQUERYRESPONSEDESIRED!EM_TLUN‚DC.B‚LDFLUN‚LUFOROUTPUT$EM_QRCƒDC.B‚0‡QUERYRETURNCHARACTER EM_KLUN‚DC.B‚CDFLUN‚LUFORINPUT3EM_SPAƒDC.L‚0‡STARTADDRESSFORUSERTEXTPLUGPOOL1EM_EPAƒDC.L‚0‡ENDƒADDRESSFORUSERTEXTPLUGPOOLŠPAGEB******************************************************************* PATCH CODE AREAB******************************************************************** PATCH…EQU…*‰LEA‡PBA(PC),A7*œA7=PROGRAMBASEADDRESS9‰MOVEM.LƒD0-D7,INITDREG-PBA(A7)‚SAVEDATAPASSEDBY&SCT. ‰MOVE.L„A7,A6*œA6=PROGRAMBASEADDRESS+*ŸTHISREGIS& TERWILLBEUSEDASTHEPROGRAM**ŸBASEADDRESSFORTHISPROGRAMEXCEPTFOR+*ŸACOUPLEOFINSTANCESWHENA6ISUSEDFOR*ŸSOMETHINGELSE‰LEA‡STACK(PC),A7*œA7=PROGRAMSTACKADDRESS‰LEA‡OPIN(PC),A0!‰MOVE.L„A0,MSGIIOS-PBA+IOSSAD(A6)‰LEA‡OPINE(PC),A0!‰MOVE.L„A0,MSGIIOS-PBA+IOSEAD(A6)!*œINITIALIZEPARAMETERBLOCKWITH*START/ENDADDR *BUFFERSIZE‰LEA‡CSECT(PC),A0 ‰MOVE.L„A0,INPIOS-PBA+IOSSAD(A6)‰LEA‡CSECTE(PC),A0 ‰MOVE.L„A0,INPIOS-PBA+IOSEAD(A6) B‰MOVE.L„REV_CODE-PBA(A6),X00110-PBA(A6)‚PUTTHEREVISIONCODEINTO=‰MOVE.L„REV_CODE+4-PBA(A6),X00110+4-PBA(A6)ƒTHEHELPMESSAGE.*+*DISPLAYVERSIONMESSAGE‚AND‚OPTIONSœ<1,4*‰LEA…VERSION(PC),A1‰MOVE.L‚REV_CODE-PBA(A6),(A1)+‰MOVE.L‚REV_CODE+4-PBA(A6),(A1),‰LEA…HEADING(PC),A1…'PATCHVERSION‚XXXXXXX'‰LEA…HEADINGE(PC),A0 ‰BSR‡MSGOUT 1‰MOVE.L„OFFSET-PBA(A6),D0ƒD0<--VALUETOCONVERT7‰LEA‡OFSTV(PC),A1ˆA0<--WHERETOPLACECONVERTEDASCII1‰BSR‡ASCII8ŽCONVERTTOASCIIANDPLACEINMESSAGE.‰LEA‡OFSTS(PC),A1ˆ'CURRENTOFFSETIS‚XXXXXXXX'‰LEA‡OFSTE(PC),A03‰BSR‡MSGOUT‰PUTOUTMESSAGEOFCURRENTOFFSET„1.4> ** PARSE THE COMMAND LINE*2ŠLEA…CLINE(PC),A0‰PARSETHECOMMANDLINEANDCHECKŠBSR…PARSEFORPARSEERRORS. ŠTST.LƒD0“* ŠBMI…ER_NVE* CMLOK…EQU†*“.1,4;ŠMOVEM.LA1-A2,PARSAREG-PBA(A6)„SAVERETURNREGSFROMPARSE*=* ON RETURN FROM PARSE, A1=ADDR OF OUTPUT FIELD OR 0, A2=ADDR*ƒOFOPTIONSFIELDOR0.*5* SET US UP SO THAT INPTLU (1) POINTS TO PROPER INPUT* DOINPUTƒEQU…* ŠBSR.SƒNEWIN *%*NOWPROCESSTHEOPTIONSFIELD¦<1,4* ‰BSR‡PROCOPT0‰MOVE.L„PTYPE-PBA(A6),D0„D0<--VALUETOCONVERT7‰LEA‡PROCV(PC),A1ˆA0<--WHERETOPLACECONVERTEDASCII1‰BSR‡ASCII8ŽCONVERTTOASCIIANDPLACEINMESSAGE‰LEA‡PROCV-PBA(A6),A1‰MOVE.W„#'‚',(A1)+‰MOVE.B„#'',(A1)-‰LEA„PROCMSGS(PC),A1ˆ'PROCESSORTYPE=„XXXXX'‰LEA„PROCMSGE(PC),A03‰BSR‡MSGOUTŠPUTOUTMESSAGEOFPROCESSORTYPE„1,4> ** HANDLE REQUEST AND EXIT* ‰BSR…DOIT°1,4 ‰BSR†C_EM_PGM ;OKEXIT:‚ERQ.TERM#0,#0†EXITWITHNORMALTERMINATIONSTATUS.*œDISPLAYERRORMESSAGE‰PAGE*:* SUBROUTINE TO ASSIGN INPUT DEVICE TO INPLUN (NORMALLY 1)*NEWIN:4ŠMOVE.L‚A6,A0CHANGEBASEADDRFORDEFAULTS12/18/847ŠLEA…INPFHS(PC),A6ˆPUTDEFAULTSINTOTHEFHSPARAMBLOC4ŠBSR.SƒDEFAULTSFORINPUT(INCLUDINGANEXTENSIONOF9ŠMOVE.W‚#'LO',FHSEXT(A6)…'LO'),THENCALLEDITFILEONTHE4ŠLEA…CLINE(PC),A0INPUTFIELDFROMTHECOMMANDLINE.ŠBSR…EDITFILE* ŠBMI…ER_NVE* .ŠLEA…PBA(PC),A6‹RESTOREBASEADDRESSREGISTER. 2ŠMOVE.L‚D0,EDITRTN-PBA(A6)ƒSAVETHERETURNEDINFO. /ŠMOVE.L‚#2,D1CHECKWHETHERTHEINPUTFIELDWAS<ŠAND.LƒEDITRTN-PBA(A6),D1ƒADEVICESPECIFICATIONRATHERTHAN"ŠBNE.SƒNOTLOAFILE.‚IFSO,ERROR. *‰FHSCALL‚INPFHS(PC)‹ASSIGNTHEINPUTFILE.‰BNE‡FATALERRŒ* 3‰MOVE.W„#$0700,D0‹IFITISNOTCONTIGUOUS,IT'SNOT,‰AND.W…FHSOPT(A0),D0‡ALOADMODULE,SOERROR.‰BNE.S…NOTLO* ‰RTS  9NOTLO…LEA…DVASGMS(PC),A1‡INFORMUSERTHATINPUTMUSTBEA.ŠLEA…DVASGME(PC),A0‡LOADMODULE,ANDTERMINATE. ŠBSR…MSGOUT*ŠBRA…ERREXITŽ*   **B* SUBROUTINE TO PLUG IN DEFAULT STUFF INTO PARAMETER BLOCK POINTED *ƒTOBYA6*DEFAULTS‚EQU…*5ŠMOVE.W‚USERNUM+2-PBA(A0),FHSUSN(A6)ƒDEFAULTUSERNUM-ŠMOVE.L‚VOLNAM-PBA(A0),FHSVOL(A6)†VOLUMENAME0ŠMOVE.L‚CATNAM-PBA(A0),FHSCLG(A6)†CATALOGUENAME@ŠMOVE.L‚CATNAM+4-PBA(A0),FHSCLG+4(A6)‚2NDPARTOFCATALOGUENAMEŠRTS**‰PAGE*<*SUBROUTINETOPROCESSOPTIONS(ONLYP=XXXXXALLOWED)<1.4* PROCOPT‚EQU‡*<‰MOVE.L„OPTSRT-PBA(A6),A2ƒA2<--STARTOFOPTIONSFIELDADDR‰MOVE.L„A2,D0TESTIT.-‰BEQ.S…OPTOVRŽIFZERO,THENNOOPTIONSEXIST.‰BSR‡OPTIONŽPROCESSOPTIONS.0‰CMP.B…#$40,D0BIT6INDICATESNOOPTIONSEXIST.!‰BEQ.S…OPTOVRŽBRANCHOUTINNONE..‰BTST†#7,D0BIT7INDICATESERRORWITHOPTION..‰BNE.S…OPTERRŽBRANCHTOPROCESSERRORMESSAGE.'‰CMP.B…#'P',D1D1<--OPTIONSCHARACTER*‰BNE.S…OPTERRŽ'P'ISTHEONLYVALIDOPTION/‰BTST†#4,D0BIT4INDICATESEQUALSIGNPRESENT.0‰BEQ.S…O& PTERRŽBRANCHTOPROCESSERRORIFNO'='. +‰CMP.L…#68000,D3‹D3<--VALUEFOLLOWING'='‰IFˆTHEN.S(‰MOVE.L„#$68000,PTYPE-PBA(A6)SAVEPTYPE3‰MOVE.L„#0,PCODE-PBA(A6)„FORCEPCODEBASEDONPTYPE‰BRA.S…OPTOVRŽDONE.‰ENDI +‰CMP.L…#68008,D3‹D3<--VALUEFOLLOWING'='‰IFˆTHEN.S(‰MOVE.L„#$68008,PTYPE-PBA(A6)SAVEPTYPE1‰MOVE.L„#4,PCODE-PBA(A6)„FORPCODEBASEDONPTYPE‰BRA.S…OPTOVRŽDONE.‰ENDI +‰CMP.L…#68010,D3‹D3<--VALUEFOLLOWING'='‰IFˆTHEN.S(‰MOVE.L„#$68010,PTYPE-PBA(A6)SAVEPTYPE3‰MOVE.L„#8,PCODE-PBA(A6)„FORCEPCODEBASEDONPTYPE‰BRA.S…OPTOVRŽDONE‰ENDI .OPTERRƒLEA‡OPERMSGS(PC),A1‰BEFINERRORMESSAGE&‰LEA‡OPERMSGE(PC),A0‰ENDERRORMESSAGE.‰BSR‡MSGOUTŽDISPLAY'INVALIDOPTIONSPECIFIED'‰BRA.L…ERREXITGETOUT. OPTOVRƒRTS¹1.4>ŠPAGE DOIT†EQU…*:ŠLEA…CHGBUF(PC),A3„CHANGEBUFFERADDRESSSTAYSINA3!!!!!)ŠCLR.LƒD1‹RECORDNUMBEROFCONTROLSECTOR"ŠBSR…FILLBUF†GOGETCONTROLSECTOR ‰BNE‡FATALERR *œJMPIFERRORONCONTROLSECTOR*H* CONTROL SECTOR NOW IN MEMORY - SET UP PARAMETER BLOCK TO CHANGE BUFFER* ‰MOVE.L„A3,INPIOS-PBA+IOSSAD(A6)‰LEA‡255(A3),A0 ‰MOVE.L„A0,INPIOS-PBA+IOSEAD(A6)** NOW PROMPT THE OPERATOR*PROMPT1:/‰LEA‡PBA(PC),A6ŽLOADPROGBASEADDRESSFORPIC. =‰MOVE.L‚A7,MODEC-PBA(A6)„MARKASNOTINCHANGEMODE(A7<>0)5‰SF†ASM_MNEM-PBA(A6)„MARKASNOTINDISASSEMBLYMODE.‰LEA…PROMPTC(PC),A1‰LEA…PROMPTCE(PC),A0NXTOPIN:"‰LEA‡STACK(PC),A7ŒRESETTHESTACK!‰LEA‡OPINE(PC),A2 ‰MOVE.L„A2,D2‰LEA…OPINS(PC),A2 ‰BSR…MSGOUTIN ‰BNE‡FATALERR*œJMPIFINPUTERRORŠLEA…OPIN(PC),A0;ŠMOVE.L‚MSGIIOS-PBA+IOSLEN(A6),A1‚CALCENDINGINPUTADDRESSŠLEA…-1(A0,A1.L),A1‡* :‰TST.BASM_MNEM-PBA(A6)ˆIFTHEBUFFERCONTAINSANASSEMBLY3‰BNEDI_ASM”LANGUAGESTATEMENT,DON'TMESSWITHIT.*?* SCAN THE INPUT FOR A COMMENT FIELD (FIELD BEGINNING WITH '*')5*ƒIFWEFINDACOMMENT,THENMOVETHECARRIAGERETURN>*ƒTOTHEFIRSTBLANKFOLLOWINGTHEREGULAR(NONCOMMENT)INPUT.<*ƒPOINTA1TOTHISCARRIAGERETURN.‚INOTHERWORDS,FAKETHE>*ƒINPUTASIFACOMMENTHADNEVERBEENPRESENTEDINTHEINPUT.*C*ˆINOTHERWORDSREPLACETHEFIRST'*'WITHA'CR'ANDTHENPROCESS>*ˆTHELINEOFINFORMATIONINPUTASITSTANDSWITHTHISCHANGE.*A*ˆTHE'*'WASALLOWEDSOYOUCOULDPUTCOMMENTSINTOACHAINFILE?*ˆTHATCONTAINEDPATCHESTOBEMADETOFILESREQUIRINGPATCHES.*A*ˆNOTICETHATALINEWHICHCONTAINSNONONBLANKCHARACTERSBEFORE?*ˆA'*'DOESNOTINCREMENTTHELOCATIONCOUNTERINCHANGEMODE.*"ŠMOVE.LA0,A5ŽA5=RUNNINGSCANNER"ŠLEA„-1(A0),A4ŠTERMINATINGPOINTER"AST0†CMP.B‚#'*',(A5)+‰SCANFOR'*'#ŠBEQ.S‚AST5BRANCHIFCOMMENTFOUND!ŠCMP.L‚A1,A5ŽTESTFORENDOFSCAN#ŠBHI.S‚TAKINPBRANCHIFENDOFSCAN4ŠCMP.B‚#'',-1(A5)ˆSEEIFWEADVTERMINATINGPOINTER$ŠBEQ.S‚AST0BRANCHIFNOTTOADVANCE*ŠLEA„-1(A5),A4ŠADVANCETERMINATINGPOINTER ŠBRA„AST0*7AST5…IF.L‚A4A0AND.LMODEC-PBA(A6)#0THEN.S6‹BRA…NOCHG2‹IFWE'REINCHANGEMODEANDONLYACOMMENT%‰ENDI—WASENTERED,JUSTPROMPTAGAIN. ŠMOVE.LA4,A1ŽNEWENDPOINTER)ŠMOVE.B#$0D,1(A4)‰PUTINCARRIAGERETURN*TAKINP:ŠBRA…DECINP‡DECODETHEINPUT** NN WAS ENTERED* NUM‡EQU…*5ŠSF†ASM_MNEM-PBA(A6)…CHECKFOROPTIONS.‚IFTHEREWERE!ŠBSR…OPINOPTŽNONE,SKIPALLTHIS. ŠBEQ.SƒNUM1‘* @ŠIF.W‚D0#'DI'‚THEN.S‚IFTHEOPTIONSPECIFIEDWASNOT'DI',2ŒMOVE.L#EM_NVO,D0ŠGIVEANERRORANDPROMPTAGAIN.ŒBSRC_EM_PGM*ŒBRAPROMPT1*ŠENDI™* 2ŠST‡ASM_MNEM-PBA(A6)„HESAID';DI',SOREMEMBERTO*§DISASSEMBLE&ASSEMBLE. .NUM1†MOVE.L‚#1,INCNUM-PBA(A6)„SETUPINCREMENT ŠBRA.SƒNUM08NUMUP…MOVE.L‚#-1,INCNUM-PBA(A6)ƒSETUPDISPLAYINCREMENT$ŠSUB.Lƒ#1,A1ˆPOINTTOENDOFNUMERIC NUM0†EQU…*,ŠTST.LƒMODEC-PBA(A6)ˆAREWEINACHANGEMODEŠBEQ.SƒCHGMOD‡BRANCHIFYES+ŠCLR.LƒMODEC-PBA(A6)ˆMARKUSINCHANGEMODE&ŠBSR…ASCSCAN†CHECKFORALLASCIIINPUT'ŠBNE.SƒNOADDR‡BRANCHFORNOTGOODINPUT)ŠBSR…ASCBIN‡GETBINARYEQUIVALENTINTOD0 ŠMOVE.L‚D1,D0)ŠMOVE.L‚D0' ,DECNUM-PBA(A6)„DISPLAYADDRESS ŠBSR…GETIDX*ŠBRA.SƒOPINOK‡BRANCHIFINPUTWITHINRANGE*7NOADDR„LEA…NOADDRS(PC),A1ƒCOMPLAINIFBADINPUTADDRESS‰LEA‡NOADDRE(PC),A0 ŠBSR…ERROUT ŠBRA…PROMPT1* OPINOK„EQU…* ŠBNE…PROMPT1†BRANCHONI/OERROR+ŠMOVE.L‚D1,GETIDXNM-PBA(A6)‚SAVEBYTEVALUE ŠBRA…DISPLAY* CHGMOD„EQU…*'ŠBSR…ASCSCAN†SCANFORLEGALASCIIINPUT+ŠBNE…BADINP‡BRANCHIFNOTLEGALASCIIINPUT:ŠMOVE.L‚DECNUM-PBA(A6),SAVDEC-PBA(A6)SAVEDISPLAYADDRESS<ŠCLR.LƒQFIRST-PBA(A6)FLAGASFIRSTTIMETHRU(SYNTAXCHECK)9ŠMOVEM.L‚A0-A1,QSAVA0-PBA(A6)‚SAVENUMERICINPUTBOUNDARY NLOOP1„EQU…*"ŠMOVE.L‚A1,D1ˆENDNUMERICBOUNDARY/ŠSUB.LƒA0,D1ˆD1HAS#OFINPUTNUMERICCHARS-13ŠMOVE.L‚A0,A1ˆSETUPFORASCIICONVERSIONOF1CHAR+ŠBTSTƒ#0,D1‰NEIMPLIESEVEN,EQIMPLIESODD'ŠBEQ.SƒNBIN‡BRANCHIFODD#CHARSINPUT-ŠADD.Lƒ#1,A1ˆMUSTCONVERTTWOIFEVEN#CHARS*'NBIN†BSR…ASCBIN‡CONVERTA0-A1TOBINARY7ŠMOVE.B‚D1,STGCHR-PBA(A6)„SETUPFORDEPOSITSUBROUTINE*ŠLEA…STGCHR(PC),A0„POINTA0TOINSERTBYTE"ŠBSR…DEPITˆGODEPOSITTHENEWBYTE+ŠADD.Lƒ#2,A1ˆSETUPTOPICKUPNEXT2BYTES ŠMOVE.L‚A1,A0 ŠSUB.Lƒ#1,A0*ŠCMP.LƒQSAVA0+4-PBA(A6),A1‚AREWETHROUGH?ŠBLE…NBIN‰BRANCHIFNOT9ŠSUB.Lƒ#1,DECNUM-PBA(A6)„CORRECTFROMFINALDEPITADVANCE/ŠTST.LƒQFIRST-PBA(A6)‡WASTHISPASS1(SYNTAX?)ŠBNE.SƒNDUN‰BRANCHIFNO1ŠMOVE.L‚#-1,QFIRST-PBA(A6)„SETUPFORREALCHANGE0ŠMOVEM.LQSAVA0-PBA(A6),A0-A1‚RESTOREVITALREGS5ŠMOVE.L‚SAVDEC-PBA(A6),DECNUM-PBA(A6)‡RESTOREADDRESS ŠBRA…NLOOP1* NDUN†EQU…*ŠTST.LƒINCNUM-PBA(A6) ŠBPL.SƒNOCHG%ŠMOVE.L‚SAVDEC-PBA(A6),DECNUM-PBA(A6)*=NOCHG…MOVE.L‚INCNUM-PBA(A6),D1„GOTONEXTADDRESSFORDISPLAYŠADD.LƒD1,DECNUM-PBA(A6)NOCHG2„MOVE.L‚DECNUM-PBA(A6),D0 ŠBSR…GETIDX(ŠBRA.SƒNXTOK1‡BRANCHIFADDRESSSTILLOK*9OFFSEG„LEA…OFFSEGS(PC),A1ƒCOMPLAINTHATWE'REOFFTHEENDŠLEA…OFFSEGE(PC),A0 ŠBSR…ERROUT ŠBRA…PROMPT1*$NXTOK1„BNE…PROMPT1†BRANCHIFBADI/O=ŠMOVE.L‚D1,GETIDXNM-PBA(A6)‚VALUEOFBYTEATNEXTDISPLAYLOC* DISPLAYƒEQU…*ŒCONSTRUCTDISPLAY,ŠMOVE.L‚DECNUM-PBA(A6),D0„ADDRESSTODISPLAYŠLEA…ADRAOUT(PC),A1#ŠBSR…ASCII8‡CONVERT&DEPOSITASCIIŠLEA‡ADRAOUT(PC),A1&*œA1=STARTMSGADDRIFNOOFFSETVALUE‰TST.L…OFFSET-PBA(A6)‰BEQ.S…DP_0100*œJMPIFNOOFFSETVALUEEXIST‰LEA‡CHGAOUTS(PC),A1)*œA1=STARTMSGADDRIFOFFSETVALUEEXISTDP_0100:‰MOVE.L„A1,MSG_ADDR-PBA(A6)0*œA1=STARTMSGADDRTOUSEWHENMSGISDISPLAYED‰MOVE.L„OFFSET-PBA(A6),D0‰BEQ.S…DP_0200*œJMPIFNOOFFSETVALUEEXIST‰ADD.L…DECNUM-PBA(A6),D0*œD0=USERADDR+OFFSETVALUE ‰BSR‡ASCII80*œCONVERTVALUEANDSTOREINSPECIFIEDADDR(A1)DP_0200::‰TST.BASM_MNEM-PBA(A6)ˆIFWE'REDOING'M....;DI',THENGO‰BNEDI_DISM“DISASSEMBLE.%ŠMOVE.L‚GETIDXNM-PBA(A6),D0‚OLDVALUE ŠBSR…BINASCIIŠMOVE.W‚D1,VALAOUT-PBA(A6)&ŠCMP.Bƒ#$1F,D0†CONSTRUCTASCIIDISPLAY%ŠBLS.SƒDPRD‰BRANCHIFNOTDISPLAYABLEŠCMP.Bƒ#$7E,D0!ŠBLS.SƒDPRC‰BRANCHIFDISPLAYABLE2DPRD†MOVE.B‚#'.',D0†DISPLAY'.'FORNONDISPLAYABLEDPRC†MOVE.B‚D0,QAOUT-PBA(A6)‰MOVE.L„MSG_ADDR-PBA(A6),A1‰LEA‡CHGAOUTE(PC),A0 ŠBRA…NXTOPIN‰PAGE*6* SUBROUTINE TO SCAN FROM A0 TO A1 FOR LEGAL HEX INPUT*ˆOUTPUT *’CONDITIONS*œZERO==>GOOD‚RETURN*˜NON-ZERO==>ERRORRETURN*ASCSCAN: ‰MOVE.L„A0,D0*œD0=STATUSFORERRORCONDITION‰CMP.B…#'$',(A0)‰BNE.S…C_ASCSCN-*œJMPIF1STCHTRNOTA'$'WHICHWOULDIMPLY'*œAHEXVALUEWHICHISALREADYASSUMMED ‰TST.B…(A0)+(*œA0=STARTADDROFHEXDATATOBEEDITED C_ASCSCN:ŠMOVE.L‚A0,-(A7)ASCCMP„CMP.Bƒ#'0',(A0)ŠBLT.SƒASCB‰BRANCHIFNOTASCIIŠCMP.Bƒ#'9',(A0)ŠBLS.SƒASCX‰BRANCHIFASCIIŠCMP.Bƒ#'A',(A0)ŠBLT.SƒASCB‰BRANCHIFNOTASCIIŠCMP.Bƒ#'F',(A0)ŠBGT.SƒASCB‰BRANCHIFNOTASCII*ASCX†ADD.Lƒ#1,A0 ŠCMP.LƒA1,A0+ŠBLE.SƒASCCMP‡BRANCHIFNOTTHRUSTRINGYES ‰CLR.L…D0*œD0=STATUSFORGOODRETURNASCB:‰MOVE.L„(A7)+,A0 *œRESTOREREG ‰TST.L…D0*œESTABLISHOUTPUTCONDITONSŠRTS*** CR1‡EQU…**ŠTST.LƒMODEC-PBA(A6)ˆAREWEINCHANGEMODE ŠBNE…PROMPT1*œJMPIFNOTINCHANGEMOD' EŠMOVE.L‚#1,INCNUM-PBA(A6) ŠBRA…NOCHG*UPˆEQU…*ŒOPERATORENTERED^ŠTST.LƒMODEC-PBA(A6) ŠBNE…PROMPT1ŠMOVE.L‚#-1,INCNUM-PBA(A6) ŠBRA…NOCHG* QUOTE…EQU…*ŒHANDLEQUOTESTRINGSŠTST.LƒMODEC-PBA(A6)(ŠBNE…BADINP‡BRANCHIFNOTINCHANGEMODEŠMOVE.L‚#1,INCNUM-PBA(A6)6ŠCLR.LƒQFIRST-PBA(A6)INDICATE1STPASS(SYNTAXCHECK)*œPASS1ISANEDITCHECKONLY2ŠMOVEM.L‚A0-A1,QSAVA0-PBA(A6)‚SAVESTRINGPOINTERS*:ŠMOVE.L‚DECNUM-PBA(A6),SAVDEC-PBA(A6)‡SAVEDISPLAYADDRESS(QBUMP…ADD.Lƒ#1,A0ˆBUMPCHARACTERPOINTER ŠCMP.LƒA1,A0/ŠBGT.SƒQUOTEDUN…BRANCHIFQUOTESTRINGFINISHED*,ŠCMP.Bƒ#'''',(A0)ƒDOWEHAVEEMBEDDEDQUOTE?.ŠBNE.SƒDEPCHR‡NO-GODEPOSITNORMALCHARACTER *žIFPASS2B* ENCOUNTERED A QUOTE IN THE STRING, MAY BE END QUOTE OR EMBEDDED. ŠADD.Lƒ#1,A0 ŠCMP.LƒA1,A0#ŠBGT.SƒQUOTEDUN…BRANCHIFENDQUOTE1ŠCMP.Bƒ#'''',(A0)ƒCHECKFORDOUBLEEMBEDDEDQUOTEŠBNE.SƒCHKUPˆIFNOTCHECKFOR^ŠBRA.SƒDEPCHR‡DEPOSITQUOTE*CHKUP…CMP.Bƒ#'^',(A0)&ŠBNE.SƒQUOTERR†BRANCHIFERROR(NOT^).ŠMOVE.L‚#-1,INCNUM-PBA(A6)ƒSETDECREMENTCOUNT#ŠADD.Lƒ#1,A0ˆBUMPCHARACTERPOINTER ŠCMP.LƒA1,A0ŠBGE.SƒQUOTEDUNŠBRA.SƒQUOTERR*$DEPCHR„BSR.SƒDEPITˆDEPOSITCHARACTER ŠBRA…QBUMP*%QUOTEDUN‚EQU…*ŒDONEWITHQUOTESTRING0ŠSUB.Lƒ#1,DECNUM-PBA(A6)„ADJUSTFROMFINALDEPIT,ŠTST.LƒQFIRST-PBA(A6)‡WASTHISTHE1STPASS?ŠBNE.SƒQDUN‰BRANCHIFNOT+ŠMOVE.B‚#-1,QFIRST-PBA(A6)ƒMARKAS2NDPASS5ŠMOVEM.LQSAVA0-PBA(A6),A0-A1‚RESTOREVITALREGISTERS=ŠMOVE.L‚SAVDEC-PBA(A6),DECNUM-PBA(A6)‡RESTOREDISPLAYADDRESS'ŠBRA…QBUMPˆGOREALLYPUTTHECHANGESIN QDUN†EQU…*ŠTST.LƒINCNUM-PBA(A6) ŠBPL…NOCHGAŠMOVE.L‚SAVDEC-PBA(A6),DECNUM-PBA(A6)ADJUSTTODISPLAYPRIORLOC ŠBRA…NOCHG*2QUOTERRƒEQU…*ŒCOMPLAINOFBADQUOTESTRINGENTEREDŠLEA…QUOTERRS(PC),A1‰LEA‡QUOTERRE(PC),A0 ŠBSR…ERROUT ŠBRA…PROMPT1*.DEPIT…EQU…*ŒDEPOSITCHARACTERPOINTEDATBYA0‰MOVEM.LƒA0-A1,-(A7))ŠMOVE.L‚DECNUM-PBA(A6),D0„DISPLAYADDRESS$ŠBSR…GETIDX‡GETLOCINCHANGEBUFFER ŠBRA.SƒQINRNG‡BRANCHIFINRANGE*œTHELOCATIONINNOTINRANGE ‰MOVE.L„A7,D6'*œSETFLAGTHATAFTERCLEANUPWESHOULD*œTRANSFERCONTROLTO'OFFSEG'‰BRA.S…CLEANUP*œCLEANUPTHESTACKANDEXIT(QINRNG„BNE.SƒCLEANUP†BRANCHIFI/OERROR,ŠTST.LƒQFIRST-PBA(A6)‡ISTHISTHEFIRSTPASS0ŠBNE.SƒQCHG‰BRANCHIFTHISPASSREQUIRESCHANGES&ŠMOVEM.L(A7)+,A0-A1‚RESTOREREGISTERSŠBRA.SƒQNOCHG‡NOCHANGEEXIT QCHG†EQU…*&ŠMOVE.L‚A0,A2ˆINDEXINTOCHANGEBUFFER!ŠMOVEM.LŽ(A7)+,A0-A1‚RESTOREREGSŠCLR.LƒD1‹FORBYTELOAD(ŠMOVE.B‚0(A2,A3.L),D1‚BEFORECHANGEBYTE#ŠCMP.Bƒ(A0),D1†SEEIFREALLYCHANGEŠBEQ.SƒQNOCHG‡BRANCHIFNOT;ŠADD.WƒD1,BCKSM-PBA(A6)…ACCUMULATE"BEFORECHANGE"CHECKSUMŠMOVE.B‚(A0),D1†NEWBYTE:ŠADD.WƒD1,ACKSM-PBA(A6)…ACCUMULATE"AFTERCHANGE"CHECKSUM2ŠMOVE.B‚D1,0(A2,A3.L)‚MAKECHANGEINCHANGEBUFFER$ŠCLR.LƒCHGED-PBA(A6)ˆFLAGASCHANGED;QNOCHG„ADD.Lƒ#1,DECNUM-PBA(A6)„BUMPTONEXTDISPLAYADDRESSŠRTS…0CLEANUP:‰MOVEM.Lƒ(A7)+,A0-A1*œRESTOREREGISTERS ‰TST.L…(A7)+!*œREMOVERETURNADDRESSOFCALLER ‰TST.L…D6 ‰BNE‡OFFSEG/*œTRANSFERCONTROLIFLOCATIONWASOUTOFRANGE ‰BRA‡PROMPT10*œTRANSFERCONTROLBECAUSEANI/OERROROCCURRED'*œEVENTHOUGHTHELOCATIONWASINRANGE* OHˆEQU…*Œ'O'COMMANDWASENTERED"ŠCMP.LƒA0,A1ˆWASJUST'O'ENTERED?2ŠBEQ.SƒODSP‰BRANCHIFYES-DISPLAYCURRENTOFFSET*1* OFFSET WAS ENTERED - CONVERT TO BINARY AND SAVE%ŠADD.Lƒ#1,A0ˆBYPASSSUBCOMMANDLETTER)ŠBSR…BLNKSKP†SKIPBLANKSTOGETTONUMBER)ŠBSR…ASCSCAN†CHECKFORGOODASCIIENTERED"ŠBNE.SƒBADINP‡BRANCHIFBADOFFSETŠBSR…ASCBIN‡ASCIINOWIND1-ŠMOVE.L‚D1,OFFSET-PBA(A6)„SAVEDESIREDOFFSET ŠBRA…PROMPT1*!* DISPLAY CURRENT VALUE OF OFFSETODSP†MOVE.L‚OFFSET-PBA(A6),D00ŠLEA…ODSPM(PC),A1…WHERETOPLACECONVERTEDASCII1ŠBSR…ASCII8‡CONVERTTOASCIIANDPLACEINMESSAGE.ŠLEA…OFSMS(PC),A1…'CURRENTOFFSETIS‚XXXXXXXX'‰LEA‡OFSME(PC),A0-ŠBSR…MSGOUT‡PUTOUTMESSAGEOFCURRENTOFFSET ŠBRA…PROMPT1*M‰EQU…*)ŠADD.Lƒ#1,A0ˆBYP( ASSSUBCOMMANDLETTER'M' .ŠCMP.Bƒ#'M',(A0)ŒIFTHEUSERTYPED'MM',WE'LL3ŠIF‚‚THEN.SACCEPTTHATTOO:BYPASSSECOND'M'.ŒADD.L#1,A0*ŠENDI™* %ŠBSR…BLNKSKP†SKIPBLANKSUNTILNUMBER3ŠMOVE.L‚A7,MODEC-PBA(A6)„MARKASNOTINCHANGEMODEŠBRA…NUM*Q‰EQU…*ŠTST.LƒCHGED-PBA(A6)3ŠBNE.SƒQ1‹BRANCHIFNOCHANGESTOWRITEOUTTODISK ŠBSR…WCHBUF3Q1ˆMOVE.L‚BCKSM-PBA(A6),D0…DISPLAYCHECKSUMMESSAGEŠLEA…CKSMV(PC),A1 ŠBSR…ASCII8ŠLEA…CKSMS(PC),A1‰LEA‡CKSME(PC),A0 ŠBSR…MSGOUT‰BRA‡OKEXIT„EXITNORMALLY.*BADINP:0‰BSR‡ER_NVE1ŠDISPLAY'INVALIDENTRY'MESSAGEAND‰BRA‡PROMPT1ŠREISSUEPROMPT.‰PAGEO********************************************************************************6*ˆHANDLEDISASSEMBLYOFNEXTINSTRUCTIONFOR'M...;DI'*O*******************************************************************************DI_DISM: 4‰MOVE.LDECNUM-PBA(A6),D0†COMPUTETHESTARTADDRESS.‰ADD.LOFFSET-PBA(A6),D0‡* /‰BTST#0,D0”IFTHESTARTADDRESSISODD,THAT'S‰IF‚‚THEN.SŽANERROR.‹LEAODDADDRS(PC),A1*‹LEAODDADDRE(PC),A0* ‹BSRERROUT’*‹BRAPROMPT1‘*‰ENDIš* 6‰MOVE.LD0,A4’A4<--VALUEOFPCFORTHISINSTRUCTION.+‰MOVE.LD0,-(A7)SAVEITONTHESTACK,TOO.‰LEACODE_BUF(PC),A1* 2*’***GET10BYTESFROMLOADMODULEATTHISPC***>‰MOVE.LDECNUM-PBA(A6),D0†TRYTOGET10BYTES.‚IFANI/OERROR>‰FOR.LD7=#1TO#10DO.S…OCCURS,GOBACKTOPROMPT1.‚EXITTO1‹BSRGETIDX’DI_DISM6PREMATURELYIFANADDRESSIS1‹BRA.SDI_DISM4ŽOUTOFRANGE.‚BYTESTAKENGOINTO‹BRA.SDI_DISM6ŽCODE_BUF.DI_DISM4ƒBNEPROMPT1‘*‹MOVE.BD1,(A1)+*‹ADD.L#1,D0‘*‰ENDFš* ;DI_DISM6CMP.L#3,D7“IFWEGOTATLEAST2BYTES,D7WILLBE,‰BLONOADDR”3.‚IFNOT,ITWASABADADDRESS. 8*SETUPENTRYCONDITIONSTOUSEDCODE68MSUBROUTINE•1,4;‰MOVE.L‚PCODE-PBA(A6),D3†D3<--CODEFORPROCESSORTYPE„1,4G‰MOVEM.LCODE_BUF-PBA(A6),D0-D2LOADTHEDATAINTOD0-D2ANDTHEADDRES>‰LEAOPIN+20-10-PBA(A6),A5…OFTHERECEIVINGBUFFERINTOA5.‚A4*§ALREADYHASTHECODE'S'PC'. 4‰BSRDCODE68M’CALLTHEDISASSEMBLER.ONRETURN,A61,47‰LEACHGBUF(PC),A3POINTSTOTHEENDOFTHEDISASSEMBLE1‰MOVE.LA6,A0’INSTRUCTION.‚A4ISTHENEWPC--FIND2‰LEAPBA(PC),A6THEDIFFERENCEANDSTOREITINTHE4‰SUB.L(A7)+,A4VALUETOINCREMENTPCBY.RESTOREA38‰MOVE.LA4,INCNUM-PBA(A6)†BECAUSEDCODE68MBLEWITAWAY. -‰ADD.L#1,A0“ADDACRLFTOWHATEVERTHEDIS-)‰MOVE.B#CR,(A0)+ŽASSEMBLERGAVEUSBACK.‰MOVE.B#LF,(A0)* @‰MOVE.LMSG_ADDR-PBA(A6),A1„TRANSFERTHEADDRESSFIELDSPREPARED4‰LEAVALAOUT(PC),A4ŒEARLIERTOTHEFRONTOFTHEDIS-‰ADD.L#10,A5’ASSEMBLYBUFFER. ‰REPEAT˜*‹MOVE.B-(A4),-(A5)Š*‰UNTIL.L‚A4A1‹* #‰MOVE.LA5,A1’PRINTTHEWHOLEMESS. ‰BSRMSGOUT”* ;‰LEAA_PRMPT(PC),A1ŒSETTHEPROMPTMESSAGEFORTHEOPERATOR>‰TST.LOFFSET-PBA(A6)ŠTOENTERASSEMBLYSOURCEANDPROMPTHIM.8‰IF.L‚‚THEN.SŒ(NOTETHATWEPRINTOUT10MORESPACES3‹ADD.L#10,A1IFTHEREISANOFFSETSOTHATWELINE,‰ENDIšUPWITHTHEDISASSEMBLEDINSTRUCTION.)‰LEAA_PRMPTE(PC),A0‰BRANXTOPIN“*‰PAGEO********************************************************************************-*†HANDLEASSEMBLYOFINPUTLINEFOR'M...;DI'*O*******************************************************************************DI_ASM: 2‰CMP.LA0,A1“IFNOTHINGWASENTERED,JUSTGOONTO,‰BLONOCHG•DISASSEMBLETHENEXTINSTRUCTION. 6‰CMP.B#'.',(A0)IF'.'WASENTERED,GETOUTOFCHANGE‰BEQPROMPT1“MODE. 5‰CMP.B#'*',(A0)IF'*'WASTHEFIRSTCHARACTER,JUST‰BEQNOCHG2”GOPROMPTAGAIN. 8*’***FINDTHEFIRSTCHARACTERPASTTHEOPCODEFIELD***/‰REPEAT˜LOOKFROMHERETOTHEENDOFTHEBUFFER?‹IF.B‚(A0)#ARROWCHR‚THEN.S„FORANONBLANKCHARACTER.EXIT;MOVE.B#SPACE,(A0)ˆTHELOOPWHENYOUFINDONE.‚CONVERTANY(‹ENDI˜RIGHTARROWCHARACTERSYOUFINDTO‹CMP.B#SPACE,(A0)+ŠSPACES.‹BNE.SDI_ASM2*‰UNTIL.L‚A0A1‹*6‰BRA.SDI_ASM5‘DIDN'TFINDONE--SKIPTHESUBSTITUTION. 3DI_ASM2‚REPE( AT˜A0POINTSTOTHECHARACTERAFTERTHE5‹CMP.B#SPACE,(A0)‹FIRSTNONBLANKCHARACTER.‚NOWLOOK1‹BEQ.SDI_ASM4FROMHERETOTHEENDOFTHEBUFFER5‹CMP.B#ARROWCHR,(A0)+‡FORTHEFIRSTBLANKCHARACTER.‹BEQ.SDI_ASM3*‰UNTIL.L‚A0A1‹*6‰BRA.SDI_ASM5‘DIDN'TFINDONE--SKIPTHESUBSTITUTION. :DI_ASM3‚SUB.L#1,A0“MOVETHEPOINTERBACKTOTHEARROWCHR. 8DI_ASM4‚MOVE.B#'O',D0FINDALLOCCURRENCESOF'O'ASIN?‰MOVE.LOFFSET-PBA(A6),D1†'OCTOPUS'BEYONDTHEOPCODEFIELDAND2‰BSRRPL_CHR“REPLACEWITHTHEOFFSET.‚ALSOREPLACE)*§ALLRIGHTARROWCHARACTERSWITHSPACES. 7*SETUPENTRYCONDITIONSTOUSECODE68MSUBROUTINE™1,4BDI_ASM5‚MOVE.LPCODE-PBA(A6),D3‡D3<--CODEFORPROCESSORTYPE‡1,4:‰LEADUMMY(PC),A3ŽWEDON'TNEEDTHEGENERATEDLINE,SO1,4>‰MOVE.LDECNUM-PBA(A6),A4†SENDITTOADUMMYBUFFER.‚A4ISPC.?‰ADD.LOFFSET-PBA(A6),A4‡A5ANDA6ARETHESTART&END+1ADDR'S-‰LEAOPIN_ASM(PC),A5‹OFTHELINETOASSEMBLE.‰LEA1(A1),A6’* 5‰BSRCODE68M“CALLTHEONE-LINEASSEMBLER.IFTHERE1,4;‰LEACHGBUF(PC),A3WASANERROR,PRINTAMESSAGEANDPROMPT‰LEAPBA(PC),A6AGAIN. ‰TST.LD7–*‰IF‚‚THEN.SŽ*‰LEASYNTMSGS(PC),A1‹*‰LEASYNTMSGE(PC),A0‹* ‹BSRERROUT’*‹BSRCHK_TERM*‹BRAPROMPT1‘*‰ENDIš* :‰LEACODE_BUF(PC),A0‹THEMACHINECODEISNOWIND0-D2,AND9‰MOVEM.LD0-D2,(A0)ŒTHE#OFBYTESISIND6.‚PUTTHECODE6‰LEAOPIN(PC),A1INABUFFERANDPREPARETOCONVERTTO<‰LEARPL_CHRT(PC),A2‹HEXASCIIINTHEOPERATORINPUTBUFFER. ‰CLR.LD0–* ,‰REPEAT˜FOREACHBYTE(THELENGTHISIND6),*§*'‹MOVE.B(A0),D0ŽMOVETHEHIGHHEXDIGIT,‹LSR.B#4,D0‘*‹MOVE.B(A2,D0.W),(A1)+†**§*'‹MOVE.B(A0)+,D0MOVETHELOWHEXDIGIT,‹AND.B#$0F,D0*‹MOVE.B(A2,D0.W),(A1)+†**§*%‹SUB.L#1,D6‘ANDREPEATUNTILD6=0. ‰UNTIL‚“* @‰MOVE.L#1,INCNUM-PBA(A6)†SETUPTHEPCFORTHENEXTDISASSEMBLY%*§TOBEJUSTBEYONDTHISINSTRUCTION. 3‰SUB.L#1,A1“SETUPTHESTART/ENDADDRESSESFORTHE4‰LEAOPIN(PC),A0MANUFACTUREDINPUTLINEANDLETTHE4‰BRACHGMOD”REGULARCHANGEMODEROUTINEDOTHEREST.‰PAGEO*******************************************************************************4*ˆROUTINETORETURNOPTIONSFIELDOFOPERATORINPUT.* *‚ONINPUT:>*„A0.L‚<--‚ISADDROFFIRSTBYTETOLOOKATINOPERATORINPUT.=*„A1.L‚<--‚ISADDROFLAST‚BYTETOLOOKATINOPERATORINPUT. *‚ONRETURN:H*„A1.L‚<--‚ADDROFLASTNONBLANKCHARBEFORE';'ORUNCHANGEDIFNO';.>*„D0.L‚<--‚THEOPTIONCHARACTERS(NOTTHE';')RIGHTJUSTIFIED*•WITHZEROFILLTOTHELEFT.C*„CONDITIONCODESAREIFNOOPTION,IFSOMEOPTIONFOUND.O******************************************************************************* OPINOPT: ;‰MOVEM.LA0/A2/D1,-(A7)ˆSAVEREGISTERSONSTACK&CLEARTHE1‰CLR.LD0–REGISTERWHICHWILLCONTAINTHERESULT.1‰MOVE.LA0,A2’INITIALIZE'LASTNONBLANK'POINTER. -‰REPEAT˜FINDTHEPOSITIONOFTHEFIRST';'IN5‹CMP.B#';',(A0)THEDESIGNATEDBUFFERAREA(IFTHERE5‹BEQ.SOPINOPT1ŽISNONE,JUSTEXITWITHD0=0).‚ATTHEC‹IF.B(A0)+#SPACETHEN.SSAMETIMEUPDATETHE'LASTNONBLANK'MOVE.LA0,A2ŽPOINTER.‹ENDI˜*‰UNTIL.L‚A0A1‹*‰BRA.SOPINOPT9* 5OPINOPT1REPEAT˜SKIPOVERSPACESBETWEEN';'ANDNEXT ‹ADD.L#1,A0‘NONBLANKCHARACTER.)‰UNTIL.B(A0)#SPACEOR.LA0A1 6*’***MOVECHARACTERSTOD0UNTILENDOFBUFFEROR***5*’***SPACEISENCOUNTEREDOR4CHARACTERSMOVED.‚***#‰MOVE.L#3,D1’LOOPATMOST4TIMES. 8OPINOPT2CMP.LA1,A0“CHECKTOSEEIFWE'REPASTTHEEND.‰BHI.SOPINOPT9* ,‰LSL.W#8,D0“STORETHENEXTCHARACTERIND0.‰MOVE.B(A0)+,D0* 9‰CMP.B#SPACE,(A0)REPEATUNLESSTHENEXTCHARISASPACE*‰DBEQD1,OPINOPT2ŽORWE'VEALREADYDONE4. >OPINOPT9MOVE.B#CR,(A2)PUTACRAFTERTHELASTNONBLANKCHAR5‰LEA-1(A2),A1‘BEFORETHE';'ANDPOINTA1BEFOREIT. ?‰MOVEM.L(A7)+,A0/A2/D1ˆRESTOREREGISTERS,SETCONDITIONCODES,‰TST.LD0–ANDRETURN.‰RTS›*‰PAGEO**************) *****************************************************************;*ˆFINDCHARINOPINBUFFER&REPLACEWITH32-BITHEXVALUE.6*ˆALSOREPLACEALLRIGHTARROWCHARACTERSWITHSPACES.* *‚ONCALL:4*„A0.L‚<--‚ADDRATWHICHTOSTARTSEARCHINGFORCHAR*„A1.L‚<--‚ENDADDRFORSEARCH"*„D0.B‚<--‚CHARACTERTOSEARCHFORE*„D1.L‚<--‚HEXVALUETOPUTINPLACEOFTHECHARACTER(NOTPRESERVED) *‚ONRETURN:<*„A1.L‚<--‚NEWENDADDR;DESTROYEDIFBUFFEROVERFLOWOCCURSF*„RETURNSDIRECTLYTOPROMPT1IFBUFFEROVERFLOWOCCURS.‚STACKMUSTBE*FIXEDBYCODETHERE.O******************************************************************************* RPL_CHRT DC.B '0123456789ABCDEF' RPL_CHR:0‰MOVEM.LA0/D2-D3,-(A7)ˆSAVEREGISTERSONSTACK. 3‰MOVE.L‚A1,-(A7)ŽPUSHTHEENDADDRESSONTHESTACK. ARPL_CHR1WHILE.L‚A0A1‚DO.S…FORTHEREMAINDEROFTHEBUFFER, :‹CMP.B#ARROWCHR,(A0)ˆ...LOOKFORTHERIGHTARROWCHAR.‚IF2‹IF‚‚THEN.SŒ...YOUFINDONE,REPLACEITWITHAMOVE.B#SPACE,(A0)ˆ...SPACE. ‹ENDI˜...* 3‹CMP.B(A0)+,D0Ž...LOOKFORTHESEARCHCHAR.‚IFYOU4‹BEQ.SRPL_CHR2Ž...FINDONE,BRANCHOUTOFTHELOOP. ‰ENDWš* 1‰MOVE.L(A7)+,A1THAT'STHEENDOFTHEBUFFER,SO5‰MOVEM.L(A7)+,A0/D2-D3ˆRESTOREREGISTERSANDRETURN.‰RTS›* ;RPL_CHR2PEAOPINE(PC)‘CHECKFORBUFFEROVERFLOWCONDITION:.‰PEA8(A1)•IFWECAN'THOLD8MOREBYTES,SEND5‰CMPM.L(A7)+,(A7)+ŒERRORMESSAGEANDGOBACKTOSUB-)‰BHI.SRPL_CHR3COMMANDLEVELANDPROMPT.‰LEAOVMSGS(PC),A1*‰LEAOVMSGE(PC),A0* ‹BSRERROUT’*‹BSRCHK_TERM*‹BRAPROMPT1‘* ;RPL_CHR3ADD.L#1,A1“MOVEALLCHARACTERSBEYONDTHECHARTO=‰WHILE.L‚A1A0DO.S†REPLACEFORWARD8BYTESTOMAKEROOM&‹MOVE.B-(A1),8(A1)ŠFORTHEHEXVALUE.‰ENDWš* 8‰MOVE.B#'$',-1(A0)ŒPUTA'$'WHERETHESEARCHCHARWAS.3‰MOVE.L#7,D3’SETUPTOLOOP8TIMES(8HEXDIGITS). 8RPL_CHR4ROL.L#4,D1“GETTHEHIGHORDERHEXDIGITINTOD24‰MOVE.BD1,D2’ANDMOVETHECORRESPONDINGTABLEENTRY2‰AND.W#$000F,D2INTOTHEBUFFER.‚DOTHIS8TIMES.‰MOVE.BRPL_CHRT(PC,D2.W),(A0)+‰DBRAD3,RPL_CHR4Ž* 4‰ADD.L#8,(A7)‘ADD8TOBUFFERLENGTH(ONSTACK)AND0‰MOVE.L(A7),A1GOLOOKFORTHENEXTOCCURRENCE.‰BRARPL_CHR1’*ŠPAGE*** DECODE OPERATOR INPUT*#*INPUT:‚A0=ADDRESSOFINPUTLINE!*‰A1=ENDINGADDRESSOFINPUTLINE(* OUTPUT: D0 = NUMBER IN BINARY (IF ANY) *‰RETURNTO:*‰NUM„FORNN*‰CR1„FOR*‰NUMUP‚FORNN^*‰UP…FOR^*‰PERIODFOR. *‰Q†FORQ*‰OH…FORO*‰M†FORMNN*‰HELPƒFORHELP* DECINP„EQU…* ŠBSR…BLNKSKP'*œREMOVELEADINGBLANKSFROMINPUTLINE* CHECK FOR BY ITSELF*ŠMOVE.L‚A1,D0ˆENDINGADDRESS ŠCMP.LƒA0,D0"ŠBLT…CR1ŠBRANCHIFCARRIAGERETURN*!* SEE IF TERMINATOR CHARACTER 'Q'*0ŠMOVE.B‚TERMCHR-PBA(A6),D1ƒTERMINATINGCHARACTERŠCMP.Bƒ(A0),D1&ŠBEQ…QŒBRANCHIFTERMINATINGCHARACTER** SEE IF PERIOD*ŠCMP.Bƒ#'.',(A0)ŠBEQ…PROMPT1†BRANCHIFPERIOD* * SEE IF '^'*ŠCMP.Bƒ#'^',(A0)„ISITA'^'ŠBEQ…UP‹BRANCHIF^** SEE IF SINGLE QUOTE*ŠCMP.Bƒ#'''',(A0) ŠBEQ…QUOTE* * SEE IF 'M'*ŠCMP.Bƒ#'M',(A0)ŠBEQ…M* * SEE IF 'O'*ŠCMP.Bƒ#'O',(A0)ŠBEQ…OH‹BRANCHFOR'O'ENTERED** SEE IF 'HELP'*‰CMP.L…#'HELP',(A0)!‰BEQ.S…HELPˆBRANCHFORHELPPANEL* * IT SHOULD BE NN OR NN^*3‰CMP.B…#'0',(A0)‹CHECKTOMAKESURETHISISAVALID*‰BLT‡BADINPŽHEXDIGIT.‚IFNOT,GOPRINTTHE1‰CMP.B…#'F',(A0)‹INVALIDENTRYMESSAGEANDPROMPT‰BHI‡BADINPŽAGAIN.‰IF.B‚(A0)#'A'‚THEN.S‚*‹CMP.Bƒ#'9',(A0)‹* ‹BHI…BADINPŽ*‰ENDIš* 3ŠCMP.Bƒ#'^',(A1)ŒITISAVALIDHEXDIGIT.‚IFITENDS/ŠBEQ…NUMUPWITHANUPARROW,BRANCHFORNN^, ŠBRA…NUM’ELSEBRANCHFORNN.*HELP:‰LEA‡X00199(PC),A0*œA0=MESSAGEENDADDR‰LEA‡X00100(PC),A1*œA1=MESSAGESTARTADDR ‰BSR‡MSGOUT*œDISPLAYHELPPANEL ‰BRA‡PROMPT1ŠPAGE=*SUBROUTINETOGETBYTEFROMLOADMODULEFILE.‚WRITEOUTTHE=*ƒCHANGEBUFFERIFREQUIRED,ANDREADINTHEPROPERSECTORTO*ƒFETCHTHEREQUESTEDBYTE.) *3*INPUT:ƒDO=BYTELOGICALADDRESS(MUSTADDOFFSET)*ŽHEADERIMAGE(GLOBAL)%*OUTPUT:‚D1=VALUEOFREQUESTEDBYTE*ŠA0=INDEXINTOCHANGEBUFFER+*ŠSTATUSISZEROIFGOOD,NONZEROOTHERWISE*-*ŠRETURNTOPCIFOPERATORINPUTWITHINRANGE*šNONZEROSTATUSIFI/OERROR. *”PC+2FOROUTOFBOUNDSADDRESS** GETIDX„EQU…*'ŠADD.LƒOFFSET-PBA(A6),D0„BIASBYOFFSET1ŠMOVE.L‚#1,RSECT-PBA(A6)…ASSUMESECTOR1TOSTART*>* FIND THE ADDRESS IN THE FILE OF THE SECTOR IN WHICH THE BYTE*ƒISCONTAINED.*5ŠLEA…MEMIMGD(PC),A2ƒBEGINNINGOFMEMORYIMAGEDESCRS.ŠCLR.LƒD2‹FORWORDLOADS ŠCLR.LƒD4,* SEE IF WE'RE AT THE END OF THE DESCRIPTORSGETIDXL2‚CMP.Lƒ#$0000FFFF,(A2)*ŠBEQ.SƒGETIDXNO…BRANCHIFATEND(NOFIND)<* SEE IF THE DESIRED ADDRESS IN D0 LIES WITHIN THE BOUNDS OF*ƒTHISMEMORYIMAGE.5ŠMOVE.W‚(A2),D2†BEGINNINGPAGEADDROFTHISMEMIMAGE#ŠLSL.L‚#8,D2‰MAKEINTOBYTEADDRESS3ŠMOVE.W‚2(A2),D4…ENDINGPAGEADDROFTHISMEMIMAGE#ŠLSL.L‚#8,D4‰MAKEINTOBYTEADDRESS1ŠADD.Lƒ#$FF,D4†MAKEHIGHESTPOSSIBLEBYTEADDRESS ŠCMP.LƒD2,D0%ŠBCS.SƒNXTIMG‡BRANCHIFNOTINBOUNDS ŠCMP.LƒD4,D0+ŠBLS.SƒFOUNDIMG…BRANCHIFWITHINTHISIMAGE.* NOT IN THIS IMAGE - UPDATE SECTOR SKIP COUNT$NXTIMG„LSR.L‚#8,D2‰PAGEBASEADDRESSŠLSR.L‚#8,D4‰PAGEHIGHADDRESSŠSUB.LƒD2,D4ˆHIGHMINUSLO1ŠADD.Lƒ#1,D4ˆONE-RELATIVECOUNTOFBLOCKSTOSKIP/ŠADD.LƒD4,RSECT-PBA(A6)…UPDATECUMULATIVECOUNT* PROCEED TO NEXT MEMORY IMAGE ŠADD.Lƒ#4,A2 ŠBRA…GETIDXL2.* SECTOR ADDRESS OF IMAGE BASE IS NOW IN RSECTFOUNDIMG‚EQU…*#* ADJUST FOR BIAS INTO MEMORY IMAGE ŠSUB.LƒD0,D2"ŠNEG.LƒD2‹BYTEOFFSETINTOSEGMENTŠLSR.L‚#8,D2‰SECTOROFFSET,ŠADD.LƒRSECT-PBA(A6),D2…SECTORADDRESSIND2-ŠCMP.LƒINSEC-PBA(A6),D2…ISSECTORALREADYIN?ŠBEQ.SƒGOTSEC‡BRANCHIFYES$ŠTST.LƒCHGED-PBA(A6)ˆWASITCHANGED?ŠBNE.SƒGETBUF‡BRANCHIFNO&ŠBSR.SƒWCHBUF‡WRITEOUTCHANGEDBUFFERŠTST.BƒINPIOS-PBA+IOSSTA(A6)ŠBNE.SƒGETIDXEX,ŠMOVE.L‚#1,CHGED-PBA(A6)…MARKASNOTCHANGEDGETBUF„MOVE.L‚D2,D1ŠMOVE.L‚D0,-(A7)…SAVETHRUCALLŠBSR.SƒFILLBUF†GOFILLBUFFERŠMOVE.L‚(A7)+,D0-ŠTST.BƒINPIOS-PBA+IOSSTA(A6)‡WASSTATUSGOOD?ŠBNE.SƒGETIDXEX…BADREAD GOTSEC„EQU…* ŠCLR.LƒD1ŠMOVE.B‚D0,D1ˆBYTEOFFSET ŠMOVE.L‚D1,A0ŠMOVE.B‚(A0,A3.L),D1‡BYTEVALUE,ŠMOVE.L‚A0,GETIDXIX-PBA(A6)‚SAVEINDEXVALUE&ŠCMP.LƒD0,D0ˆSETEQUALCONDITIONCODES$ŠBRA.SƒGETIDXEX…EXITTHISSUBROUTINE*GETIDXNO‚EQU…*3ŠADD.Lƒ#2,(A7)†CAN'TFINDSEGMENTWITHTHISADDRESS8GETIDXEX‚BNE.SƒGETX2ˆKEEPCONDITIONCODESFOREQ,NESAME.ŠSUB.LƒOFFSET-PBA(A6),D0„REBIASACCESSADDRESS(ŠCMP.BƒD0,D0ˆFORCEEQUALCONDITIONCODES ŠBRA.SƒGETX43GETX2…SUB.LƒOFFSET-PBA(A6),D0„REBIASACCESSADDRESS*ŠCMP.Lƒ#0,A7ˆFORCEUNEQUALCONDITIONCODESGETX4: ‰CLR.L…D6'*œINITIALIZEREGISTERFORUSEASAFLAGŠRTS‰PAGE*** FILL THE INPUT BUFFER**INPUT:ƒD1=SECTORADDRESS&*OUTPUT:‚PUTSUPMESSAGEONI/OERROR&*ŠD0=0IFNOERROR,NONZEROOTHERWISE* FILLBUFƒEQU…*ŠLEA…INPIOS(PC),A0 ŠMOVE.L‚D1,IOSRRN(A0)‡SETUPRRN$ŠMOVE.W‚#IOREAD,(A0)‚SETUPFORREADŠTRAPƒ#2"ŠBEQ.SƒFILLBUFX…BRANCHIFNOERRORŠMOVE.L‚D0,-(A7)…SAVETHRUCALL ‰BSR‡C_EM_PGM*œDISPLAYERRORMESSAGEŠMOVE.L‚(A7)+,D0FILLBUFX‚RTS…0*+* ROUTINE TO WRITE OUT SECTOR CHANGE BUFFER* WCHBUF„EQU…*ŠLEA…OUTIOS(PC),A0%ŠMOVE.W‚#IOWRIT,(A0)ˆSETUPFORWRITEŠMOVE.L‚D0,-(A7)ŠTRAPƒ#2ŠBEQ.SƒWCHBUFEX ‰BSR‡C_EM_PGM*œDISPLAYERRORMESSAGEWCHBUFEX‚MOVE.L‚(A7)+,D0ŠRTS…0** ROUTINE TO SKIP BLANKS1*ƒINPUT:‚A0POINTSTOBEGINNINGOFSTRINGTOSCAN$*‹A1POINTSTOENDOFSTRINGTOSCAN0*ƒOUTPUT:A0POINTSTOFIRSTNON-BLANKCHARACTER* BLNKSKPƒEQU…* ŠCMP.LƒA0,A1'ŠBLT.SƒBLNKSKPX…BRANCHIFDONESCANNINGŠCMP.Bƒ#'',(A0)ŠBNE.SƒBLNKSKPX ŠADD.Wƒ#1,A0ˆBUMPTONEXTLETTERŠBRA.SƒBLNKSKPBLNKSKPX‚RTS…0*:* CONVERT AXCII POINTED AT BY A0 TO BINARY RETURNED IN D1.A*ƒAFTERCONVERSION,A0WILLBEPOINTINGTONON-NUMERICCHARACTER.$*ƒINPUTISALWAYSASSUMEDTOBEHEX.* ASCBIN„EQU…* ŠBSR…BLNKSKP ŠCLR.L* ƒD1 NXTCHR„EQU…*'ŠCMP.LƒA1,A0ˆAREWEATTHEENDOFSCAN?ŠBLE.SƒNXTCHR2†BRANCHIFNO)ŠMOVE.L‚A1,A0ˆREADJUSTA0TOPOINTTOENDŠBRA.SƒASCBINX†GETOUTNOW NXTCHR2ƒEQU…*)ŠMOVE.B‚(A0)+,D0…GETNEXTCHARTOCONVERT'ŠCMP.Bƒ#'0'-1,D0„DETERMINEIFLEGALHEX ŠBLE.SƒASCBINX†BRANCHIFNOTHEXŠCMP.Bƒ#'9',D0'ŠBLE.SƒASC09ˆBRANCHIFHEXINRANGE0-9ŠCMP.Bƒ#'A'-1,D0 ŠBLE.SƒASCBINX†BRANCHIFNOTHEXŠCMP.Bƒ#'F',D0 ŠBGT.SƒASCBINX†BRANCHIFNOTHEX"ŠSUB.Bƒ#7,D0ˆBIASFORLETTER(A-F)#ASC09…SUB.Bƒ#'0',D0†BIASFORNUMBERŠLSL.L‚#4,D1‰X16&ŠADD.BƒD0,D1ˆNEWDIGITINTOLOWNIBBLE ŠBRA…NXTCHR ASCBINXƒRTS…0**0* SUBROUTINE TO CONVERT BINARY TO ASCII (1-BYTE)*ƒENTRY:…BSRƒBINASCII*‹D0-BINARYBYTE(LOWORDER).*ƒEXIT:ƒD1-HEXASCIIVALUEINLOWORDERWORD*BINASCII‚EQU…* ŠCLR.LƒD1 ŠMOVE.B‚D0,D1 ŠROR.L‚#4,D1*ŠADD.Bƒ#'0',D1†CONVERTASIFDECIMAL(0-9)ŠCMP.Bƒ#'9',D1ŠBLE.SƒBIN2‰BRANCHIFOK*ŠADD.Bƒ#'A'-'9'-1,D1ƒCONVERTFORHEX(A-F) BIN2†EQU…* ŠLSL.W‚#4,D1 ŠROL.L‚#4,D1*ŠADD.Bƒ#'0',D1†CONVERTASIFDECIMAL(0-9)"ŠCMP.Bƒ#'9',D1†SEEIFDECIMALTYPEŠBLE.SƒBIN4‰BRANCHIFYES*ŠADD.Bƒ#'A'-'9'-1,D1ƒCONVERTFORHEX(A-F) BIN4†EQU*ŠRTS…0*$* CONVERT NUMBER TO 8 BYTES OF ASCII*ƒINPUT:ƒD0=NUMBERTOCONVERT'*ŒA1=WHERETODEPOSITCONVERTEDADDRESS* ASCII8„EQU…* ŠADD.Lƒ#8,A1ŠMOVE.L‚#4,D2ˆLOOPCOUNTASCII8LƒBSR…BINASCIIŠMOVE.W‚D1,-(A1) ŠROR.L‚#8,D0 ŠSUB.Lƒ#1,D2ŠBGT.SƒASCII8LŠRTS…0** * SUBROUTINES** OUTPUTS MESSAGES (IMAGE MODE))*ƒENTRYA1=BEGINNINGADDRESSOFMESSAGE *‰A0=ENDINGADDRESSOFMESSAGE* MSGOUT„EQU…*.ŠMOVE.L‚A1,MSGIOS-PBA+IOSSAD(A6)„BEGINADDRESS ŠMOVE.L‚A0,MSGIOS-PBA+IOSEAD(A6)ŠLEA…MSGIOS(PC),A0ŠTRAPƒ#2ŠRTS…0*"* SUBROUTINE TO OUTPUT, THEN INPUT** INPUT A1 = OUTPUT START*‡A0=OUTPUTEND*‡A2=INPUTSTART*‡D2=INPUTEND*MSGOUTIN‚EQU…* ŠBSR…MSGOUT!ŠMOVE.L‚A2,MSGIIOS-PBA+IOSSAD(A6)!ŠMOVE.L‚D2,MSGIIOS-PBA+IOSEAD(A6)ŠLEA…MSGIIOS(PC),A0ŠTRAPƒ#2‰BNE.S…OUTIN_XT ‰BSR‡SBARG OUTIN_XT:ŠRTS**2* SUBROUTINE TO PRINT ERROR MESSAGE AND, IF WE ARE5* BEING RUN FROM A CHAIN FILE, TERMINATE IMMEDIATELY.*ERROUT: ‰BSR‡MSGOUT‰BRA.S…CHK_TERM‰PAGEJ***************************************************************************+*ˆERRORMESSAGESFROMERRORMESSAGEHANDLER*J************************************************************************** ER_NVE1:7‰MOVE.L„#EM_NVE,D0Š'INVALIDENTRY'MESSAGE,BUTRETURN!‰BSR.S…C_EM_PGM‰RTS ER_NVO:*‰MOVE.L„#EM_NVO,D0Š'INVALIDOPTION'ERROR.‰BRA.S…FATALERR ER_OPTCF:-‰MOVE.L„#EM_OPTCF,D0ˆ'OPTIONCONFLICT'ERROR.‰BRA.S…FATALERR*ER_NVE:)‰MOVE.L„#EM_NVE,D0Š'INVALIDENTRY'ERROR.***J***************************************************************************2*ˆROUTINETOCALLERRORMESSAGEHANDLER,THENDIE.*J************************************************************************** FATALERR:‰BSR.S…C_EM_PGM2ERREXIT‚ERQ.TERM‚#0,#$C000‹EXITWITHERRORSTATUS.***M****************************************************************************** *’CALLTOERRORMESSAGEHANDLER.**ˆCALL†BSR‡C_EM_PGM*A*ˆINPUTS„D0ANDA0SETBYIOSORFHSCALL,ORD0FORNONIOS/FHS.*N****************************************************************************** C_EM_PGM:&‰MOVE.L„A0,-(A7)ŒSAVEA0ONTHESTACK.>‰LEA‡EM_PBLK+4-PBA(A6),A0GETADDRTOSTOREA0INPARAMBLOCK.0‰MOVE.L„(A7)+,(A0)ŠMOVEOLDA0INTOPARAMBLOCK.*‰MOVE.L„D0,-(A0)ŒMOVED0INTOPARAMBLOCK.0‰MOVE.L„#2,D0LOADD0WITH'EMHCALL'INDICATOR."‰TRAP†#4’CALLTHELOADER/EMHTASK. HCHK_TERM:BTSTƒ#0,LOGUNTS+3-PBA(A6)‚IFWE'REBEINGRUNFROMACHAINFILE,0ŠIF‚‚THEN.STERMINATEIMMEDIATELYWITHERRORŒERQ.TERM#0,#$C000‰STATUS.ŠENDI™* ‰RTS  ŠEND„PATCH* ééé=/*=/*†PRTDUMP.AF=/**=/* Chain file to assemble PRTDUMP utility=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to PRTDUMP.LS=/*=/IFC \1ƒ=ARGPRTDUMP.LS=/ENDIF=/*$=ASM PRTDUMP.SA,PRTDUMP.RO,\1;RZ=106=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.IOE.EQ=/*}=/*=ENDééééééK' PRTDUMP LF``rrPRTDUMP SAiiºgrrRENAME AF**rrRENAME LF33rrRENAME SA<<…crrREPAIR AFÅÅ"rrREPAIR LFÎÎrrEPAIR1 SA× ªrr+ =/*=/*†PRTDUMP.LF=/*(=/* Link chain file to create PRTDUMP.LO=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to PRTDUMP.LL=/*=/IFC \1ƒ=ARGPRTDUMP.LL=/ENDIF=/*=LINK ,PRTDUMP.LO,\1;AHMIX ATTRIBUTES PSEG SEG0:0-14 $0INPUT PRTDUMP.ROLIB 0.&.UTILIB.ROEND=/*=ENDééééééX)PRTDUMP‚IDNT†4,1‡VERSAdosPRTDUMPutilityG*************************************************************************ˆPRTDUMP.SA*-*ˆPRINTCONTENTSOFFILEPRODUCEDBYTASKDUMP*G************************************************************************‡REVISIONHISTORY* *‡12048448*’WithVERSAdosversion4.4,theorganizationoftheTCB8*’structurewaschanged,aswellastheplacementofthe7*’TSTstructurewithintheTCB.‚Theconstantportionof.*’theutilityhadtobechangedtocorrespond.*H**************************************************************************†*INCLUDESTATEMENTS***ˆINCLUDE9995.&.TR1.EQ*ˆINCLUDE9995.&.IOE.EQ*;***********************************************************‰NOLIST‰INCLUDE9995.&.TR1.EQ‰INCLUDE9995.&.IOE.EQ‰LIST ˆOPTƒFRS,NOCL*0********‚TASKDUMPANALYSIS**********************…COMMANDLINEFORMAT:2*ˆPRTDUMP[,#][;] *…OPTIONS:*ˆA=ALL„R=RAM*…INPUTCOMMANDS:5*ˆAD†[,][]*ˆALL*ˆHELP1*ˆMD†[,][]*ˆOFFSET‚*ˆOUTPUT‚#*ˆQUIT*ˆRAM*ˆREGS*ˆSEGM„*ˆTCB*ŒPAGE MESGˆMACROŒLEAMSGIOS(PC),A0 ŒPEA\1(PC)ŒMOVE.L(A7)+,IOSSAD(A0) ŒPEA\2(PC)ŒMOVE.L(A7)+,IOSEAD(A0)ŒTRAP„#2ŒENDM* INPUT‡MACROŒLEAMSGIOS(PC),A0!ŒMOVE.W#IOPIMG+IOPCNP,IOSOPT(A0) ŒPEA\1(PC)ŒMOVE.L(A7)+,IOSSAD(A0) ŒPEA\2(PC)ŒMOVE.L(A7)+,IOSEAD(A0)ŒTRAP„#2ŒMOVE.W‚#IOPCNP,IOSOPT(A0)ŒLEAƒMSGIIOS(PC),A0ŒTRAP‚#2ŒENDM SPC 2(*****************************************‡FIELDFORMATTINGMACRO‰*…(**************************************** SPC 2'*ƒFLDASM-LABEL,TEXT,DATA-SIZE,C+ ONTINUE SPC 1 FLD„MACRO‡DC.B‚\2 \1…DCB.B\3,0‡IFNC‚'C','\4' ‡DC.B‚CR,LF‡ENDC‡ENDM‡SPC2)******************************************‹UTILITYMACROSŽ*)***************************************** SPC 2 aZjorjzX‚aŠB’QšE¢GªS²Kº[ÂGÊWÒBÚEâEêHòHúcJ TQ+*RD‚BYTE-COUNT,FILE-ADDR,MEMORY-ADDR,ERROR‡SPC1RD…MACRO‡IFNC‚'D2','\1' ‡MOVE.L\1,D2‡ENDC‡IFNC‚'D1','\2' ‡MOVE.L\2,D1‡ENDC‡LEA„\3(PC),A1 ‡BSR„MOVEMEM‡BNE„\4‡ENDM‡SPC1.*MOVE-HEX‚BYTE-COUNT,SOURCE-ADDR,DEST-ADDRESS‡SPC1 MVHEX‚MACRO ‡IFEQƒ\1-1 ‡MOVE.B\2,D0‡ENDC ‡IFEQ„\1-2 ‡MOVE.W‚\2,D0‡ENDC ‡IFEQ„\1-3 ‡MOVE.L‚\2,D0‡ENDC ‡IFEQ„\1-4 ‡MOVE.L‚\2,D0‡ENDC‡LEA…\3(PC),A1‡BSR…CONVHEX\1‡ENDM‡SPC10*MOVE-ASCII‚BYTE-COUNT,SOURCE-ADDR,DEST-ADDRESS‡SPC1 MVASC‚MACRO‡MOVE.L#\1,D1 ‡LEA„\2,A0 ‡LEA„\3,A1 ‡BSR„MOVEASC‡ENDM‡SPC1*…WANT-CONDITIONALPAGESKIP‡SPC1 WANTƒMACRO‡SUB.W‚\1,CNTLIN-PBA(A5) ‡BGT.S‚\@A ‡BSRƒNEWPAGE‡SUB.W‚\1,CNTLIN-PBA(A5) \@A„EQUƒ*‡ENDM‡SPC‚1*…PRINT‚-‚PRINTALINE‡SPC‚1 PRINT‚MACRO‡LEA‚\1(PC),A1‡LEA‚\1E(PC),A2 ‡BSRƒPRTLXI‡ENDM * PRINTF MACRO‡LEA‚\1(PC),A1‡LEA‚\1E(PC),A2 ‡BSRƒPRTLXX‡ENDM‰PAGE CR…SET$0D LF…SET$0A  **„TSTMMUEQUATES*TSTLB„EQU‡0‰LOGICALBEGINTSTLE„EQU‡2‰LOGICALENDTSTPO„EQU‡4‰PHYSICALOFFSET/TSTCTLƒEQU‡6‰CONTROL(NULLBYTE+CONTROLBYTE)ŠPAGE ŠSECTION0 PBA†EQU* 4REV†DC.B'122084'‡DATETHISPROGRAMWASLASTCHANGED4‰DC.B''ŒBLANKINDICATESCLEANASSEMBLY(NOTPATCH)‰DC.B'4'ŒMAJORREVISIONNUMBER ŠDS.Lƒ$40 STACK…EQU„* INITDREG‚EQU„*.MONITORƒDC.Lƒ0,0ŠMONITORTASKNAMEANDSESSION"VOLNAMEƒDC.Lƒ0ŒDEFAULTVOLUMENAME"USERNUMƒDC.Lƒ0ŒDEFAULTUSERNUMBER CATALOGƒDC.Lƒ0,0ŠDEFAULTCATALOG!CMDLNG„DC.Lƒ0ŒCOMMANDLINELENGTH%LOGUNTSƒDC.Lƒ0ŒLOGICALUNITSASSIGNEDTASKNAMƒDC.Lƒ0ŒTHISTASK'SNAME"TASKSESƒDC.Lƒ0ŒTHISTASK'SSESSION"USERNUML‚DC.Lƒ0ŒLOGONUSERNUMBER*(CLINE…COMLINE‚80ˆBUFFERFORCOMMANDLINE*PARSAREG‚EQU„*#OUTPSRTƒDC.Lƒ0‹OUTPUTFIELDADDRESS"OPTSRT„DC.Lƒ0‹OPTIONFIELDADDRESS*2FATLCNTƒDC.Wƒ5ŠNUMBEROFTIMESTOTRYBEFOREABORT)ADRBGNDƒDC.Lƒ0ŠSAVEADDRESSTOSTARTDUMPCNTBYTEƒDC.Lƒ0Š#BYTESTODUMP)ADROFST1‚DC.Lƒ0ŠOFFSETTOLOGICALADDRESS3ADROFST2‚DC.Lƒ0ŠTEMPOFFSETGIVENWITHDUMPCOMMAND/PRINTERƒDC.Wƒ0ŠNON-ZEROIFOUTPUTISTOPRINTER#PAGESIZƒDC.Wƒ0ŠSIZEOFPRINTERPAGE(CNTLIN„DC.Wƒ0ŠCOUNTOFLINELEFTONPAGE0PAGEONEƒDC.Wƒ0ŠFLAG1STLINE-NOSLEWONHEADER'SAVERRNƒDC.Lƒ-1‰LASTRRNREADFROMDISK*"ASQPB…DC.Lƒ0,0ˆTASK,SESSION=SELFŠDC.Bƒ7,30‡STATUS,MAXMSGŠDC.Lƒ200ˆSIZEOFQASRADDRƒDC.Lƒ0ŠASRADDRESSŠDC.Lƒ0ŠPAGE**…FHSANDIOSPARAMETERBLOCKS*0BRKIOSƒDC.W‚IOBRKS…CLAIMBREAKSFORTHISSESSION ‰DC.W‚IOPCAD ‰DC.W‚5,0 ‰DC.L‚0,0,0,0)ASRADDR2DC.L‚0ŠADDRESSTOGOTOONBREAK*"LISTFHS‚EQUƒ*ŠASSIGNOUTPUTDEVICE ‰DC.W‚FHASGN ‰DC.W‚FOPEW‰DC.W‚3 ‰DC.B‚'„'‰DC.W‚0 ‰DC.B‚'’' ‰DC.L‚$FF ‰DC.W‚0,0,0*%MSGIOSƒEQUƒ*‰SENDMESSAGETOOPERATOR ‰DC.W‚IOWRIT ‰DC.W‚IOPFOR ‰DC.W‚LDFLUN‰DC.W‚0‰DC.L‚0,0,0,0,0*(MSGIIOS‚EQUƒ*ˆREADCOMMANDFROMOPERATOR ‰DC.W‚IOREAD ‰DC.W‚IOPFOR ‰DC.W‚CDFLUN ‰DC.W‚0,0,0‰DC.L‚0‰DC.L‚0 ‰DC.L‚0,80*&RBLKIOS‚EQUƒ*‹READCRASHDUMPDISKETTE ‰DC.W‚IOREAD‰DC.W‚IOPBIN+IOPRAN‰DC.W‚1 ‰DC.W‚0,0,0‰DC.L‚0‰DC.L‚0‰DC.L‚0 ‰DC.L‚256* INPFHSƒEQU„*ASSIGNINPUTDEVICE ‰DC.WƒFHASGN‰DC.WƒFOPER+FOPSEQ‰DC.Wƒ1 ‰DC.Bƒ'„'‰DC.Wƒ0‰DC.Bƒ'TASKDUMPˆDU'‰DC.Wƒ0,0,256,0,0,0*&LSTIOSƒEQU„*ŠFORMATTEDWRITETOOUTPUT ‰DC.WƒIOWRIT ‰DC.WƒIOPFOR‰DC.WƒLDFLUN,0‰DC.Lƒ0,0,0,0,0,0*#LSTIIOS‚EQU„*ŒIMAGEWRITETOOUTPUT ‰DC.WƒIOWRIT ‰DC.WƒIOPIMG‰DC.WƒLDFLUN,0‰DC.Lƒ0,0,0,0,0,0‰PAGE**†MESSAGESTOOPERATOR*‰DS.W‚0PR, OMPTCSDC.B‚$D,$A,'PRTD:>'PROMPTCEEQU‚*-1‰DS.W‚08REENTERSDC.B‚$D,$A,'PRTD:REENTEROUTPUTDEVICENAME>'REENTEREEQU‚*-1‰DS.W0RETRYSƒDC.B‚'RETRY?(Y/N)>'RETRYEƒEQUƒ*-1‰DS.W‚0 BRKRCVƒDC.B‚'PRTD:BREAKRVCD!!'BRKRCVE‚EQUƒ*-1‰DS.W‚0%SGNMSGƒDC.B‚'PRTD:SEGMENTNOTFOUND'SGNMSGE‚EQUƒ*-1‰DS.W‚0MGBADAR‚DC.B‚'PRTD:‚ADDRESS')MGBADAD‚DC.B‚'XXXXXXISNOTPARTOFTASK' ‰DC.B‚$60‰DC.B‚'SMEMORYSPACE'MGBADAREEQUƒ*-1**!HELPMSGSDC.B'PRTDUMP„REVISION'5REV_COPYDC.B'ˆ',CR,LF‰WEMOVEREVISIONDATATOHERE"‰DC.B'COMMANDLINEFORMAT:',CR,LF?‰DC.B'ƒPRTDUMP[,#][;]',CR,LF‰DC.B'OPTIONS:',CR,LF‰DC.B'ƒA=ALL„R=RAM',CR,LF‰DC.B'INPUTCOMMANDS:',CR,LFB„DC.B'ƒAD†[,][]',CR,LF‰DC.B'ƒALL',CR,LF‰DC.B'ƒHELP',CR,LF>„DC.B'ƒMD†[,][]',CR,LF‰DC.B'ƒOFFSET‚',CR,LF#‰DC.B'ƒOUTPUT‚#',CR,LF‰DC.B'ƒQUIT',CR,LF‰DC.B'ƒRAM',CR,LF‰DC.B'ƒREGS',CR,LF!‰DC.B'ƒSEGM„',CR,LF‰DC.B'ƒTCB',CR,LFHELPMSGE EQU *-1‰PAGE* *…MESSAGESSENTTOOUTPUTDEVICE*‰DS.W‚0PAGSLEWSDC.W‚$200CMGTCB1ƒDC.B‚CR,LF!‰FLDƒPTASK,<'DUMPOFTASK'>,4,C‰FLDƒPSESN,<'('>,4,C‰FLDƒPPRI1,<')PRI$'>,2,C‰FLDƒPPRI2,<',$'>,2,C‰FLDƒPUSER,<'‚USER'>,4,C‰FLDƒPDATE,<'‚DATE'>,2,C‰FLDƒPTIME,<'/XX/XX‚TIME'>,2,C‰DC.B‚':XX:XX'‰DC.B‚CR,LF,LFMGTCB1E‚EQUƒ*-1PAGSLEWEEQUƒ*-1*‰DS.W‚0 MGTCB2ƒEQUƒ* MGTCB2A‚EQUƒ* MGTCB2B‚EQUƒ*‰FLDƒPENTRY,<'ENTRYLOC'>,6,C"‰FLDƒPMONTK,<'‚MONITORTASK'>,4,C‰FLDƒPMONSN,<'('>,4,C ‰DC.B‚')'MGTCB2E‚EQUƒ*-1‰FLDƒPASQAD,<'ƒASQAT'>,6,CMGTCB2AEEQUƒ*-1‰FLDƒPCCBAD,<'‚CCBAT'>,6,CMGTCB2BEEQUƒ*-1*‰DS.W‚0MGTCB3ƒDC.B‚CR,LF"‰FLDƒPTRAPV,<'TRAPVECTORS'>,6,C ‰FLDƒPEXCPV,<'ƒEXCPVECTORS'>,6MGTCB3E‚EQUƒ*-1‰DS.W‚0**„SEGMENTINFORMATIONLINE*!MSGSEGM‚FLDƒMGSGNAM,<'SEG='>,4,C‰FLDƒMGSGFRL,<'FR'>,6,C‰FLDƒMGSGFRP,<'(PHY'>,6,C‰FLDƒMGSGTOL,<')TO'>,6,C‰FLDƒMGSGTOP,<'(PHY'>,6,C‰FLDƒMGSGSIZ,<')'>,6,C‰FLDƒMGSGATTR,<'BYTES'>,9,CMSGSEGMEEQUƒ*-1*‰DS.W‚0MSGCRLF‚DC.B‚$20,$20,CR,LFMSGCRLFEEQUƒ*-1**„ABORTMESSAGE*‰DS.W‚0 MSGAC1ƒEQUƒ* MSGAC2ƒEQUƒ*‰FLDƒMGTSK,<''>,4,C ‰FLDƒMGTSK2,<'ABORTEDBY'>,4,C‰FLDƒMGACOD,<'CODE'>,4,CMSGAC1E‚EQUƒ*-1‰FLDƒMGATYP,<'‚'>,4,C‰FLDƒMGASTK1,<'ERROR'>,4,C‰FLDƒMGASTK2,<''>,8,C‰FLDƒMGASTK3,<''>,4,CMSGAC2E‚EQUƒ*-1MSGBUSƒDC.B‚'BUS'MSGADRƒDC.B‚'ADDR'**„PRINTREGISTERS*‰DS.W‚0MSGR1„DC.B‚CR,LF‰FLDƒMGPC,<'PC'>,8,C‰FLDƒMGSR,<'‚SR'>,4‰DC.B‚LFMSGD1„FLDƒMGD0,<'D0'>,8,C‰FLDƒMGD1,<'ƒD1'>,8,C‰FLDƒMGD2,<'ƒD2'>,8,C‰FLDƒMGD3,<'ƒD3'>,8‰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'>,8MSGR1EƒEQUƒ*-1*‰DS.W‚0SAMEABOVDC.B'Œ'?‰DC.B'********************SAMEASABOVE********************' ‰DC.B''‰PAGE**ƒOPERATORINPUTCOMMANDS* CMDTBL‚EQUƒ*ˆDC.L‚'TCB',PTCBX-BEGINˆDC.L‚'ALL',PALLD-BEGINˆDC.L‚'MD‚',PMDMP-BEGINˆDC.L‚'ADRD',PADMP-BEGINˆDC.L‚'OFFS',OFFSET-BEGINˆDC.L‚'OUTP',CHGOUT-BEGINˆDC.L‚'RAM',PRAMD-BEGINˆDC.L‚'REGS',PREGS-BEGINˆDC.L‚'SEGM',PSEGM-BEGINˆDC.L‚'HELP',HELP-BEGINˆDC.L‚'QUIT',QUIT-BEGIN CMDTBLEEQUƒ*ˆPAGE*C*‡SEGMENTTABLE--WEBUILDTHISWITHINFOFROMTASKSEGMENTTABLES* ‰OFFSETƒ0SEGNAME‚DS.L‚1NAME'SEGLADD‚DS.L‚1LOGICAL‚STARTINGADDRESS(SEGPADD‚DS.L‚1PHYSICALSTARTINGADDRESSSEGSIZE‚DS.L‚1LENGTHINBYTESSEGTYPE‚DS.W‚11=RAM,‚3=ROM1SEGATTR‚DS.W‚1ATTRIBUTES(RAM/ROM,SHAREABILITY)8SEGRECD‚DS.W‚1RECORD#WHERESEGMENTSTARTSINDUMPFILESEGENTSZEQUƒ** ‰SECTION‚0SEGTABL‚DCB.B‚SEGENTSZ*8,0****ƒBUFFERS,ETC.*‰DS.W0MAXBUFƒEQU$400*TABLBUF‚DS.B‚$200*, %INPTBUF‚DS.B‚80ŒHOLDSOPERATORINPUT.INPTBUFEEQUƒ*-1‹**‰DS.B‚1THISEXTRABYTEISFORSBARG'SCR.*‰DS.W‚0HOLDLIN‚DS.B‚16*PRTLINƒDS.B‚80*.RBUF…DS.B‚$100ŠHOLDSLOADERINFORMATIONBLOCK. RBUFE„EQUƒ*-1*RDBUF„DS.B‚MAXBUFˆ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‰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<*************************************************************#*ˆPROGRAMSECTIONFORƒPRTDUMP*<************************************************************ (ŒXREFƒPARSE,EDITFILE,SBARG,DATEOG,OPTION BEGIN‡EQU„* PRTDUMP…EQU„*ŒLEA„PBA(PC),A7%ŒMOVEM.L‚D0-D7/A0-A2,INITDREG-PBA(A7) ‰MOVE.L„A7,A5‰LEASTACK-PBA(A5),A7'*œA5WILLHOLDTHEPROGRAMBASEADDRESS!*§USEDFORPOSITION-INDEPENDENCE. 7‰BSRSET_ADDRˆPUTADDRESSESINTOPARAMETERBLOCKS,ETC. ‰ERQ.GTASQASQPB-PBA(A5)2*œTRYTOCLAIMBREAKS.‚IFWECAN'TBECAUSEWEWERE‰IOSCALL‚BRKIOS-PBA(A5)&*œCALLEDFROMACHAINFILE,THAT'SOK.%‰IFAND.BD0#ISTATMTHEN.S9‹BRAFATALERR†(NOTE:‚IFIOSHASBEENFIXED,THECHECKFOR‰ENDIISTATMCANBEREMOVED.)**†PARSETHECOMMANDLINE*DUMPA2†LEA„CLINE-PBA(A5),A0 ŒBSR„PARSE ŒTST.L‚D0 ŒBMIERINVAL%DUMPA8†MOVEM.L‚A1-A2,PARSAREG-PBA(A5)**†SETUPOUTPUTDEVICE* ŒMOVE.L‚A1,D0'ŒBEQ.SƒDUMPA12…BRANCHIFNONESPECIFIED ŒBSR…NEWOUT**‡SETUPINPUTFILE*DUMPA12…BSR…NEWIN*)*‡READTASKCONTROLBLOCK-1ST2RECORDS*ŒRD…#512,#-1,SAV- ETCB,FATALERR*>*…MOVETASKNAME,SESSN,PRIORITIESANDUSER#TOHEADINGLINE*&‹MVASCƒ4,TCBNAME-PBA(A5),PTASK-PBA(A5)'‹MVASCƒ4,TCBSESSN-PBA(A5),PSESN-PBA(A5)‹MVHEXƒ1,TCBCPRI-PBA(A5),PPRI1 ‹MVHEXƒ1,TCBCPRI-PBA+1(A5),PPRI2‹MOVE.W‚TCBUSER-PBA(A5),D0‹LEA…PUSER-PBA(A5),A1 ‹BSR…CONVDEC4**†CONVERTTIMEFORHEADINGLINE*6DUMPA18…MOVE.L‚TCBTIME-PBA(A5),D0ˆTIMEFROMSYSPARAMSŒDIVU„#1000*60,D0ŒSWAP„D0 ŒCLR.LƒD3ŒMOVE.W‚D0,D3ŠSECONDS*1000ŒDIVU„#1000,D3‡SECONDS ŒCLR.WƒD0ŒSWAP„D0ŽHOURS*60+MINUTES ŒDIVU„#60,D0 ŒMOVE.L‚D0,D2ŒSWAP„D2ŽMINUTESŒLEA…PTIME-PBA(A5),A1ŒBSR…CONVDEC2ˆCONVERTHOURS ŒLEA…1(A1),A1 ŒMOVE.W‚D2,D0ŒBSR…CONVDEC2ˆCONVERTMINUTES ŒLEA…1(A1),A1 ŒMOVE.W‚D3,D0ŒBSR…CONVDEC2ˆCONVERTSECONDS**…CONVERTDATEFORHEADINGLINE*6ˆMOVE.L‚TCBDATE-PBA(A5),D0ˆGETDATEFROMSYSTEMPARAMS ˆBSR…DATEOGŒCONVERTTOGREGORIANˆMOVE.L„D0,D1‹SAVEALLFIELDSˆLEA…PDATE-PBA+3(A5),A1ˆBSR…CONVDEC2‹CONVERTDAY ˆMOVE.L‚D1,D0 ˆLSR.Lƒ#8,D0ˆLEA…PDATE-PBA(A5),A1ˆBSR…CONVDEC2ŠCONVERTMONTH ˆMOVE.L‚D1,D0ˆSWAP„D0ˆSUB.Wƒ#1900,D0ˆLEA…PDATE-PBA+6(A5),A1ˆBSR…CONVDEC2ŠCONVERTYEAR*1*…BUILDTABLEOFADDRESSESANDRANDOMRECNUMBERS*&ˆLEA…SEGTABL-PBA(A5),A4„STARTOFTABLEˆMOVE.L‚#2,D3‰1STRANDREC#7*ˆ***NOTE:SEGMENTSAREDUMPEDRAMFIRST,THENROM***,BILDA2‚MOVE.W‚#1,SEGTYPE(A4)ƒSETTYPETORAM ˆBSR.SƒBLDGTRAM†FINDRAMSEGMENTˆBNE.SƒBILDA4ˆBRANCHIFFOUND ˆBSR.SƒBLDGTROM†FINDROMSEGMENT(ˆBEQ.SƒBILDA6ˆBRANCHIFNOMORESEGMENTS(ˆADD.Wƒ#2,SEGTYPE(A4)‚CHANGETYPETOROM*0BILDA4‚MOVE.L‚(A3),SEGNAME(A4)‚SAVESEGMENTNAME+ˆMOVE.L‚A1,SEGLADD(A4)„SAVELOGICAL‚ADDRESS,ˆMOVE.L‚A2,SEGPADD(A4)„SAVEPHYSICALADDRESS1ˆMOVE.L‚D1,SEGSIZE(A4)„SAVESEGMENTSIZEINBYTESAˆMOVE.W‚D3,SEGRECD(A4)„SAVERECORD#WHERESEGSTARTSINDUMPFILE.ˆMOVE.W‚D0,SEGATTR(A4)„SAVESEGMENTATTRIBUTES&ˆLSR.Lƒ#8,D1CONVERTSIZETO#RECORDS-ˆADD.LƒD1,D3ADDTORECORD#(STARTNEXTSEG)%ˆLEA…SEGENTSZ(A4),A4ƒNEXTTABLEENTRY ˆBRA…BILDA2ŒGOBACKFORNEXTSEG**BILDA6‚CLR.WƒSEGTYPE(A4)‡FLAGENDOFTABLE*D*‡PERFORMSPECIFIEDOPTION,ORGOTOCOMMANDPROCIFTHEREARENONE.*ˆMOVE.L‚OPTSRT-PBA(A5),A2.*œGETTHEPATTERNOFOPTIONSSELECTEDINTOD7.9ˆBSR…CKFOROPT…IFNOOPTIONS,GOTOTHECOMMANDPROCESSOR. ˆTST.LƒD7‹* ˆBEQ…CMDPRO‡* =ˆCMP.Bƒ#1<<0,D7…IFOPTIONA(BIT0SET),GOTO'ALL'ROUTINE. ˆBEQ…PALLDˆ* =ˆCMP.Wƒ#1<<1,D7…IFOPTIONR(BIT1SET),GOTO'RAM'ROUTINE. ˆBEQ…PRAMDˆ* :ˆBRA…EROPTCON…MUSTBEACOMBINATION,WHICHISNOTALLOWED.*)*…FINDANDPROCESSONESEGMENTDESCRIPTOR*#BLDGTRAMMOVE.L‚#1,D1ˆRAMINDICATOR ‰BRA.SƒBLDGT2#BLDGTROMMOVE.L‚#3,D1ˆROMINDICATOR*5BLDGT2ƒLEA…TSTMMU-PBA(A5),A2…ENDOFSEARCHINDICATOR.)‰LEA…TSTMMU-PBA+32(A5),A0‚ENDOFMMULIST&BLDGT3ƒLEA…-8(A0),A0…MMUENTRYPOINTER&‰CMP.WƒTSTCTL(A0),D1DOESENTRYEXIST?‰BEQ.SƒBLDGT4ˆBRANCHIFYES‰CMP.LƒA2,A0‰ENDOFSEARCH?‰BNE…BLDGT3ˆBRANCHIFNO'‰BRA.SƒBLDGT5ˆRETURN-NOSEGMENTFOUND*/BLDGT4ƒMOVE.W‚36(A0),D0…SAVESEGMENTATTRIBUTES$‰BSET„#5,TSTCTL(A0)FLAGENTRYFOUND+‰LEA…32(A0),A3…SAVEADDRESSOFSEGMENTNAME 3‰CLR.LƒD1ŒCONVERTSTARTINGLOGICALPAGETOSTARTING4‰MOVE.W‚TSTLB(A0),D1‚LOGICALADDRESSANDSAVEINA1.‰LSL.Lƒ#8,D1‰*‰MOVE.L‚D1,A1‰* 0‰CLR.LƒD1ŒCOMPUTESTARTINGPHYSICALADDRESSFROMA‰MOVE.W‚TSTPO(A0),D1‚PHYSICALOFFSET(PAGES)ANDSTARTINGLOGICAL$‰LSL.Lƒ#8,D1‰ADDRESSANDSAVEINA2.‰LEA…(A1,D1.L),A2‚* (‰CLR.LƒD1ŒCOMPUTE#OFPAGESINSEGMENT,5‰MOVE.W‚TSTLE(A0),D1‚CONVERTTOBYTESANDSAVEIND1.‰SUB.Wƒ(A0),D1‡*‰ADD.Wƒ#1,D1‰*‰LSL.Lƒ#8,D1‰* BLDGT5ƒRTS‰PAGE*?*‚PUTADDRESSESINTOPARAMETERBLOCKS.‚ALLREGISTERSPRESERVED.* SET_ADDR: ,‰MOVEM.LA0/A1,-(A7)‹SAVEREGISTERSA0&A1. 4‰LEAANSBRK(PC),A1ADDRESSOFBREAKSERVICEROUTINE.‰MOVE.LA1,ASRADDR-PBA(A5)…*‰MOVE.LA1,ASRADDR2-PBA(A5)„* :‰LEAMSGIIOS-PBA(A5),A0ˆPUTADDRESSOFBUFFERFOROPERATOR9‰LEAINPTBUF-PBA(A5),A1ˆINPUTINTOINPUTIOSPARAMB- LOCK.‰MOVE.LA1,IOSSAD(A0)Š*‰LEAINPTBUFE-PBA(A5),A1‡*‰MOVE.LA1,IOSEAD(A0)Š* 8‰LEARBLKIOS-PBA(A5),A0ˆPUTADDRESSOFBUFFERFORLOADER4‰LEARBUF-PBA(A5),A1‹INFORMATIONBLOCKINTOTHEDISK+‰MOVE.LA1,IOSSAD(A0)ŠREADIOSPARAMBLOCK.‰LEARBUFE-PBA(A5),A1Š*‰MOVE.LA1,IOSEAD(A0)Š* 2‰MOVEM.L(A7)+,A0/A1‹RESTOREREGISTERSANDRETURN.‰RTS›*‰PAGEL*****************************************************************************&*‘***ROUTINETOCHECKFOROPTIONS**** *ˆONCALL:4*ŠA2.L‚<--‚ADDRESSOFOPTIONSFIELDINCOMMANDLINE. *ˆONRETURN:'*ŠD7.L‚<--‚PATTERNOFOPTIONSSELECTED.5*ŠA2.L‚<--‚ADDRESSOFBYTEJUSTBEYONDOPTIONSFIELD. *ŠALLOTHERREGISTERSPRESERVED.*ˆSIDEEFFECTS:>*ŠTERMINATESVIAERRORMESSAGEHANDLERIFUNRECOGNIZEDOPTION.*L*****************************************************************************TEST_FOR MACRO‰IF.B‚D1#'\1'‚THEN.S‹OR.L„#1<<\2,D7 ‹BRA…CKFOR1‹ENDI‰ENDM** CKFOROPT: ;‰MOVEM.LƒD0-D4/A3-A4,-(A7)ƒSAVEREGISTERSUSEDBY'OPTION'. 1‰CLR.L…D7ˆINITIALIZETHEOPTIONPATTERNREGISTER. /‰IFA2#0‚THEN.S‚IFTHEREAREANYOPTIONS, :CKFOR1…BSR…OPTION„GETTHENEXTOPTIONINTHECOMMANDLINE.&‹BTST„#6,D0…EXITIFTHEREARENOMORE.‹BNE.SƒCKFOR9„* 3*’***USERENTERSCODEFORVARIOUSOPTIONSHERE***&‹TEST_FOR‚A,0…IF'A',SETBIT0OFD7.&‹TEST_FOR‚R,1…IF'R',SETBIT1OFD7.**-‹BRA‡EROPTINVŠIFYOUGOTTOHERE,ITWASN'TA*§VALIDOPTION.*‰ENDI >CKFOR9ƒMOVEM.L(A7)+,D0-D4/A3-A4…RESTOREREGISTERSANDRETURN.‰RTS‰PAGE**‡RESPONDTOBREAK* ANSBRK‚EQU‚*ˆERQ.RDEVNT‚INPTBUF-PBA(A5)!ˆLEA‚STACK-PBA(A5),A7ŠRESETSTACKˆERQ.SETASQ‚#7ˆMESG‚BRKRCV,BRKRCVE ˆBRA.SCMDPROˆSPC‚2**‡DISKERRORROUTINE*>PDSKERSTST.LD0IFD0=0THEERRORISNOTFROMIOS,SODON'T>ˆBEQ.SCMDPRO‰CALLTHEERRORMESSAGEHANDLER(E.G.THEADDRESS,ˆBSRC_EM_PGM‰MIGHTHAVEBEENOUTOFRANGE). **’***NOTE--CMDPRO(COMMANDPROCESSOR)***(*’***MUSTBEIMMEDIATELYAFTERTHISƒ***ŒPAGE*!*…COMMANDLINEPROCESSINGROUTINE*‡-PUTSOUTPROMPT*‡-READSCOMMANDFROMKEYBOARD%*‡-CALLSAPPROPRIATECOMMANDPROCESS*‡-HASERRORRETURN* CMDPROƒEQU‚*>‰LEA„STACK-PBA(A5),A7‚RESETSTACK-CANGETHEREFROMANYWHERE‰LEA„CMDTBLE-PBA(A5),A4‰INPUT‚PROMPTCS,PROMPTCE‰BNE.SCMDPABRT ‰BSRSBARG ‰BEQ.SCMDPR2 ‰BSRC_EM_PGM ‰BRACMDPRO*%*…SEARCHFORCOMMANDINCOMMANDTABLE*+CMDPR2ƒLEAƒCMDTBL-PBA(A5),A3‰STARTOFTABLE"‰LEAƒINPTBUF-PBA(A5),A2ˆINPUTLINE'CMDPR4ƒCMP.B‚#$D,(A2)‰IS1STCHARACR?‰BEQ.SCMDPWHATŠBRANCHIFYES%‰CMP.B‚#'',(A2)+‡SKIPLEADINGBLANKS ‰BEQƒCMDPR4*CMDPR6ƒEQU„*STARTSEARCH'‰LEA„-1(A2),A0‡STARTOFCOMMANDENTERED"‰MOVE.LA3,A1‹NEXTCMDTABLEENTRY#‰MOVE.B(A0)+,D0ˆFIRSTBYTEENTERED"‰CMP.B‚(A1)+,D0ˆMATCHTABLEENTRY?‰BNE.S‚CMDPR9ŠBRANCHIFNO"‰MOVE.L‚#3,D1ŠCOMPARE3MORECHARS(CMDPR7ƒMOVE.B‚(A0)+,D0‡NEXTCHARENTERED‰CMP.Bƒ#'',D0ˆISITABLANK?#‰BEQ.SƒCMDPR20ˆIFYES-FOUNDMATCH‰CMP.Bƒ#$D,D0‰ISITACR?#‰BEQ.SƒCMDPR16ˆIFYES-FOUNDMATCH$‰CMP.Bƒ(A1)+,D0‡MATCHCHARINTABLE?‰BNE.SƒCMDPR9‰BRANCHIFNO!‰SUB.Lƒ#1,D1ŠDECREMENTCHARCOUNT&‰BNE…CMDPR7‰GOBACKTOCHECKNEXTCHAR‰BRA.SƒCMDPR12ˆFOUNDCOMMAND*0CMDPR9ƒADD.Lƒ#8,A3ŠINCREMENTTONEXTTABLEENTRY‰CMP.LƒA4,A3ŠENDOFTABLE?‰BNE…CMDPR6‰BRANCHBACKIFNO‰BRA.SƒCMDPWHAT‡GOSAYWHAT?*-*†FOUNDCOMMANDINTABLE-GOTOSPECROUTINE* CMDPR12‚EQU…*$‰MOVE.B‚(A0)+,D0‡FINDENDOFCOMMAND‰CMP.Bƒ#$D,D0‰ISITACR?‰BEQ.SƒCMDPR16ˆBRANCHIFYES‰CMP.Bƒ#'',D0ˆISITABLANK?'‰BNE…CMDPR12ˆIFNO-GOCHECKNEXTCHAR‰BRA.SƒCMDPR20 CMDPR16‚EQU…*%‰LEA…0,A0‹INPUTLINEHASNOMOREINFO CCMDPR20‚MOVE.L‚4(A3),A3‰COMPUTEADDRESSOFROUTINEBYADDINGOFFSET@‰LEA…BEGIN-PBA(A5),A4FROMLABEL'BEGIN'(STOREDINTABLE)TOPC‰ADD.LƒA4,A3ŠFORLABEL'BEGIN'. ‰JMP…(A3)‹GOTOROUTINESELECTED**„COMMANDNOTUNDERSTOOD*CMDPWHATEQU…* ‰BSR…INVAL ‰BRA…CMDPRO**…CANNOTCOMMUNICATEW. ITHUSER*CMDPABRTEQU„*5‰SUB.W‚#1,FATLCNT-PBA(A5)‚HAVEWETRIEDENOUGHTIMES?‰BNE„CMDPRO‹BRANCHIFNOCMDPABTFERQ.ABORT‚#$200‰PAGE**ˆPRINTHELPMESSAGE*HELP: 0‰LEAREV-PBA(A5),A0–MOVEREVISIONINFO(8BYTES)4‰LEAREV_COPY-PBA(A5),A1‘FROMTOPOFPROGRAMTOHELP‰MOVE.L(A0)+,(A1)+–MESSAGE.‰MOVE.L(A0),(A1)˜* -‰LEAMSGIOS-PBA(A5),A0›TEMPORARILYSETUPFOR/‰MOVE.W#IOPIMG+IOPCNP,IOSOPT(A0)ˆIMAGEOUTPUT. 0‰MESGHELPMSGS,HELPMSGE’OUTPUTTHEHELPMESSAGE. 6‰MOVE.W#IOPCNP,IOSOPT(A0)RESTORETOFORMATTEDOUTPUT$‰CLR.LD0 ANDRETURNWITHOKSTATUS. ‰BRACMDPROž* ˆPAGE**‡CHANGETONEWOUTPUTDEVICE* CHGOUT‚EQU„*,ˆMOVE.L‚A0,OUTPSRT-PBA(A5)‚USER'SINPUTLINE ˆBSR…NEWOUT ˆBRA…CMDPRO**…SETDEFAULTOFFSETVALUE* OFFSETƒEQU…*‰LEA…ADROFST1-PBA(A5),A1‰BSR.SƒOFFSETC ‰BNE…CMDPWHAT ‰BRA…CMDPRO* OFFSETC‚EQU…*‰BSR…HEXBIN‰CONVERTTOBINARY‰BNE.SƒOFFSETCR‡BRANCHIFERROR ‰MOVE.L‚(A1),D0ˆGETBINARYVALUE'‰LSL.Lƒ#8,D0ŠSHIFTTOSETBIT15IFNEG‰ASR.Lƒ#8,D0ŠEXTENDSIGN$‰MOVE.L‚D0,A6ŠEXTENDSIGNTO32BITS‰MOVE.L‚A6,(A1)ˆPUTITBACK‰CLR.LƒD0ŒGOODRETURNFLAG OFFSETCR RTS*+*†USERSAYSQUIT--TERMINATEWITHOUTERROR8*†(NOTE:‚WETERMINATEIMMEDIATELYIFERROROCCURSANDWE"*‡AREBEINGRUNFROMACHAINFILE.)* QUIT…EQU„* ‰ERQ.TERM‰PAGE**†DUMPALLOFTASK*(PRAMD„MOVE.W#3,D4‰TYPE3ISROMSEGMENT ‰BRA.S‚PALLD1PALLD„CLR.W‚D4PALLD1ƒBSR„NEWPAGE#‰BSR„DSPTCBˆDUMPTASKCONTROLBLOCK.‰LEA„SEGTABL-PBA(A5),A4„STARTOFSEGMENTTABLE*PALLD2ƒTST.W‚SEGTYPE(A4)ƒDOESENTRYEXIST?(‰BEQ.S‚PALLD4ˆBRANCHIFNOMORESEGMENTS‰CMP.W‚SEGTYPE(A4),D4 ‰BEQ.S‚PALLD4‰BSR„DMPSEGˆDUMP1SEGMENT‰LEA„SEGENTSZ(A4),A4ƒNEXTENTRY ‰BRA„PALLD22PALLD4ƒTST.L‚OPTSRT-PBA(A5)WASALLOPTIONCHOSEN?‰BNE„QUIT‹IFYES-QUIT‰BRA„CMDPRO‰GOGETNEXTCOMMAND**…PRINTREGISTERS* PREGS„EQU„* ‰BSR„NEWPAGE‰PRINT‚MSGCRLF‰BSR„DSPREGS†GODIPLAYREGS‰PRINT‚MSGCRLF ‰BRA„CMDPRO**†PRINTTCBINFO* PTCBX„EQU„* ‰BSR„NEWPAGE‰BSR.S‚DSPTCB†DISPLAYTCB ‰BRA„CMDPRO‰PAGE**†DUMPONESEGMENT* PSEGM„EQU„*!‰MOVE.LA0,D0‡TESTBUFFERADDRESS%‰BEQ.S‚PSEGM8†BRANCHIFNONAMEGIVENPSEGM1ƒMOVE.B(A0)+,D0"‰CMP.B‚#'',D0…SKIPLEADINGBLANKS ‰BEQ„PSEGM19‰LEA„INPTBUF-PBA(A5),A1‚STORENAMEATBEGINNINGOFBUFFER‰MOVE.L‚#4,D1†4CHARS ‰BRA.S‚PSEGM3!PSEGM2ƒMOVE.B(A0)+,D0„GET1CHAR(PSEGM3ƒCMP.B‚#CR,D0†ISTHISENDOFLINE?‰BNE.S‚PSEGM4†BRANCHIFNO#‰MOVE.BD0,(A0)…MOVECRTONEXTPOS%‰MOVE.B#'',D0…REPLACECRWITHBLANK*PSEGM4ƒMOVE.BD0,(A1)+„SAVE1CHAROFNAME‰SUB.L‚#1,D1‡COUNTCHARACTERS ‰BNE„PSEGM2*.‰LEA„SEGTABL-PBA(A5),A4‚STARTOFSEGMENTTABLE'‰MOVE.L‚INPTBUF-PBA(A5),D0„SEGMENTNAME,PSEGM6ƒCMP.L‚SEGNAME(A4),D0„DOESNAMEMATCH?#‰BEQ.S‚PSEGM9‡YES-GODUMPSEGMENT%‰LEA„SEGENTSZ(A4),A4„NEXTTABLEENTRY$‰TST.W‚SEGTYPE(A4)„DOESENTRYEXIST?‰BNE„PSEGM6‰KEEPLOOKING*(PSEGM8ƒMESGƒSGNMSG,SGNMSGE†ERRORMESSAGE ‰BRA„CMDPRO*(PSEGM9ƒBSR„DMPSEGˆDUMPSEGMENTASKEDFOR ‰BRA„CMDPRO‰PAGE*%*…SUBROUTINETOPRINTTCBINFORMATION* DSPTCBƒEQU„*4‰TST.W‚PRINTER-PBA(A5)ƒWAS1STLINEALREADYPRINTED?‰BNE.S‚DSPTCB2‡BRANCHIFYES‰PRINT‚MGTCB1ˆ1STLINE*'DSPTCB2‚MVHEX‚3,TCBENTRY-PBA(A5),PENTRY&‰MVASC‚4,TCBMON-PBA(A5),PMONTK-PBA(A5)(‰MVASC‚4,TCBMON-PBA+4(A5),PMONSN-PBA(A5)&‰TST.L‚TCBCHAN-PBA(A5)ƒDOESCCBEXIST?‰BNE.S‚DSPTCB2A†BRANCHIFYES%‰TST.L‚TCBASQ-PBA(A5)‚DOESASQEXIST?‰BNE.S‚DSPTCB2A†BRANCHIFYES-‰PRINTF‚MGTCB2‡PRINTLINE(ENTRYANDMONITOR)‰BRA.S‚DSPTCB3*&DSPTCB2AMVHEX‚3,TCBASQ-PBA(A5),PASQAD&‰TST.L‚TCBCHAN-PBA(A5)‚DOESCCBEXIST?‰BNE.S‚DSPTCB2B3‰PRINTF‚MGTCB2A…PRINTLINE(ENTRY,MONITORANDASQ)‰BRA.SƒDSPTCB3*'DSPTCB2BMVHEX‚3,TCBCHAN-PBA(A5),PCCBAD8‰PRINTF‚MGTCB2B…PRINTLINE(ENTRY,MONITOR,ASQANDCCB)*"DSPTCB3‚MOVE.L‚TCBTVECT-PBA(A5),D0-‰ADD.LƒTCBEVECT-PBA(A5),D0…CHECKBOTHVECTORS‰BEQ.SƒDSPTCB4‰BRANCHIFNONE ‰MVHEXƒ3,TCBTVECT-PBA(A5),PTRAPV ‰MVHEXƒ3,TCBEVECT-PBA(A5),PEXCPV ‰PRINTƒMGTCB3*,DSPT. CB4‚BSR.SƒDSPSEGS‡PRINTLISTOFSEGMENTS ‰BSR…DSPABRT‡PRINTABORTMESSAGE‰BSR…DSPREGS‡PRINTREGISTERS‰RTS‰PAGE*5*…SUBROUTINETOPRINTNAMESANDADDRESSESOFSEGMENTS*DSPSEGS‚PRINT‚MSGCRLF‹SPACE.‰LEA„SEGTABL-PBA(A5),A4ˆSTARTOFSEGMENTTABLE'DSPSEG2‚TST.W‚SEGTYPE(A4)‡ENDOFTABLE?‰BEQ„DSPSEGR‹BRANCHIFYES‰BSR.S‚DSP1SEG‹PRINT1LINE‰LEA„SEGENTSZ(A4),A4ƒNEXTENTRY ‰BRA„DSPSEG2*+DSP1SEG‚MVASC‚4,SEGNAME(A4),MGSGNAM-PBA(A5)‰MVHEX‚3,SEGLADD(A4),MGSGFRL‰MVHEX‚3,SEGPADD(A4),MGSGFRP‰MVHEX‚3,SEGSIZE(A4),MGSGSIZ 5‰MOVE.L‚SEGLADD(A4),D1ˆCOMPUTEANDFORMATLOGICALEND‰ADD.LƒSEGSIZE(A4),D1ˆADDRESS.‰SUB.Lƒ#1,D1‘*‰MVHEX‚3,D1,MGSGTOL‹* 6‰MOVE.L‚SEGPADD(A4),D1ˆCOMPUTEANDFORMATPHYSICALEND‰ADD.LƒSEGSIZE(A4),D1ˆADDRESS.‰SUB.Lƒ#1,D1‘*‰MVHEXƒ3,D1,MGSGTOPŠ* ?‰LEAMGSGATTR-PBA(A5),A0‡LOADADDRESSOFATTRIBUTEDESCRIPTIONS ?‰BTST.B#14-8,SEGATTR(A4)†MOVETOTHATADDRESSEITHER'READ'OR‰IF‚‚THEN.SŽ'R/W'.‹MOVE.L#'READ',D0‹* ‰ELSE.S˜*‹MOVE.L#'R/W',D0‹*‰ENDIš*‰BSR.SMOVED0’* ‰MOVE.B#'',(A0)+ADDASPACE. =‰BTST.B#12-8,SEGATTR(A4)†MOVETOTHATADDRESSONEOF'GSHR',‰IF‚‚THEN.SŽ'LSHR',OR'„'.‹MOVE.L#'GSHR',D0‹* ‰ELSE.S˜*‹BTST.B#13-8,SEGATTR(A4)„*‹IF‚‚THEN.SŒ*MOVE.L#'LSHR',D0‰* ‹ELSE.S–*MOVE.L#'„',D0‰*‹ENDI˜*‰ENDIš*‰BSR.SMOVED0’* *‰PRINTF‚MSGSEGMPRINTTHELINEANDRETURN. DSPSEGR‚RTS */*„SUBROUTINETOMOVECHARACTERSIND0TOBUFFER*„WHOSEADDRESSISINA0.*MOVED0:2‰MOVE.L#3,D1’INITIALIZELOOPCOUNTERFOR4TIMES. 7MOVED0_1ROL.L#8,D0“ROTATETHEHIGHBYTEINTOPOSITION*‰MOVE.BD0,(A0)+ANDMOVEINTOTHEBUFFER. "‰DBRAD1,MOVED0_1ŽDOTHIS4TIMES. ‰RTS‰PAGE**†SUBROUTINETODUMP1SEGMENT*‡A4POINTSTOTABLEENTRY*DMPSEGƒBSRƒNEWPAGE‰PRINTMSGCRLF‰BSRƒDSP1SEG…PRINTIDLINE‰PRINTMSGCRLF6‰MOVE.L‚SEGLADD(A4),ADROFST2-PBA(A5)‚BEGINNINGADDRESS ‰CLR.LƒADRBGND-PBA(A5)ŠNOOFFSET3‰MOVE.L‚SEGSIZE(A4),CNTBYTE-PBA(A5)‚#BYTESTODUMP ‰BSR…PMDUMP‰RTS‰PAGE*#*…SUBROUTINETOPRINTABORTMESSAGE*"DSPABRT‚PRINT‚MSGCRLF…SPACEOUTPUT&‰MVASC‚4,TCBNAME-PBA(A5),MGTSK-PBA(A5)'‰MVASC‚4,TCBATSK-PBA(A5),MGTSK2-PBA(A5) ‰MVHEX‚2,TCBABORT-PBA(A5),MGACOD‰CMP.L‚#'EXEC',TCBATSK-PBA(A5)‰BEQ.S‚DSPABR4DSPABR2‚PRINTF‚MSGAC1‰RTS*DSPABR4‚LEA„MSGBUS-PBA(A5),A4‰CMP.W‚#$8010,TCBABORT-PBA(A5)‰BEQ.S‚DSPABR6‰LEA„MSGADR-PBA(A5),A4‰CMP.W‚#$8011,TCBABORT-PBA(A5) ‰BNE„DSPABR2#DSPABR6‚MVASC‚4,(A4),MGATYP-PBA(A5) ‰MVHEX‚2,TCBBERR-PBA(A5),MGASTK1"‰MVHEX‚4,TCBBERR+2-PBA(A5),MGASTK2"‰MVHEX‚2,TCBBERR+6-PBA(A5),MGASTK3‰PRINTF‚MSGAC2‰RTS**„SUBROUTINETOPRINTREGISTERS*"DSPREGS‚MVHEX‚4,TCBPC-PBA(A5),MGPC‰MVHEX‚2,TCBSR-PBA(A5),MGSR*‰LEA„TCBD0-PBA(A5),A0‰LEA„MGD0-PBA(A5),A1‰MOVE.W‚#15,D5DSPREG2‚MOVE.L‚(A0)+,D0 ‰BSR„CONVHEX4 ‰LEA…6(A1),A1‰DBRAƒD5,DSPREG2 ‰PRINT‚MSGR1‰RTS‰PAGE**…DUMPBLOCKOFMEMORY.*ˆA0=0ORPOINTSTOPARAMETERSONINPUTLINE* PADMP„EQU„*<‰MOVE.LADROFST1-PBA(A5),ADROFST2-PBA(A5)‚GETDEFAULTOFFSET7‰LEA„ADRBGND-PBA(A5),A1‰PLACETOPUTDUMPSTARTADDRESS‰BSR„HEXBINCONVERTADDRESS-‰BMI„CMDPWHAT‹BRANCHIFBADVALUEFORADDRESS ‰BEQ.S‚PADMP2BRANCHIFNOCOMMA,‰LEA„ADROFST2-PBA(A5),A1‚PLACETOPUTOFFSET‰BSR„OFFSETCŒCONVERTOFFSET,‰BNE„CMDPWHAT‹BRANCHIFBADVALUEFOROFFSET;PADMP2ƒLEA„CNTBYTE-PBA(A5),A1‰PLACETOSTOREENDINGADDRESS"‰BSR„HEXBINCONVERTENDINGADDRESS1‰BNE„CMDPWHAT‹BRANCHIFBADVALUEFORENDADDRESS*‰MOVE.L‚CNTBYTE-PBA(A5),D0ˆGETENDADDRESS2‰BNE.S‚PADMP3IFENDADDRESS=0,BYTECOUNT=$F.‰MOVE.L#$F,CNTBYTE-PBA(A5) ‰BRA.SPMDMP3JPADMP3ƒSUB.LƒADRBGND-PBA(A5),D0OTHERWISEBYTECOUNT=ENDADDR-BEGADDR‰BMI„CMDPWHAT‹CAN'TBEMINUS'‰MOVE.LD0,CNTBYTE-PBA(A5)SAVE#BYTES‰BRA.S‚PMDMP3CONTINUEDUMP* PMDMP„EQU„*<‰MOVE.LADROFST1-PBA(A5),ADROFST2-PBA(A5)„GETDEFAULTOFFSET7‰LEA„ADRBGND-PBA(A5),A1ŠPLACETOPUTDUMPSTARTADDRESS‰BSR„HEXBINŽCONVERTADDRESS-‰BMI/ „CMDPWHATŒBRANCHIFBADVALUEFORADDRESS ‰BEQ.S‚PMDMP2ŽBRANCHIFNOCOMMA,‰LEA„ADROFST2-PBA(A5),A1‰PLACETOPUTOFFSET‰BSR„OFFSETCCONVERTOFFSET,‰BNE„CMDPWHATŒBRANCHIFBADVALUEFOROFFSET7PMDMP2ƒLEA„CNTBYTE-PBA(A5),A1ŠPLACETOSTOREBYTECOUNT‰BSR„HEXBINŽCONVERT#BYTES+‰BNE„CMDPWHATŒBRANCHIFBADVALUEFORCOUNT$PMDMP3ƒBSR„NEWPAGESTARTONNEWPAGE‰BSR.S‚PMDUMPŽGOPRINTDUMP#‰BRA„CMDPROŽRETURMFORNEXTCOMMAND‰PAGE*3*„PMDUMP‚-‚FORMATANDPRINTSPECIFIEDBLOCKOFDUMP*!*ˆADRBGND=ADDRESSTOSTARTDUMP*ˆADROFST2=OFFSET*ˆCNTBYTE‚=NUMBEROFBYTES* PMDUMPƒEQU„*‰MOVEM.L‚A3-A4,-(A7))‰MOVE.LCNTBYTE-PBA(A5),D0ŠGETBYTECOUNT ‰BNE.S‚PMDMP4ŽBRANCHIFNOTZERO ‰MOVE.L#1,D0MUSTBEATLEAST1PMDMP4ƒADD.L‚#$F,D0ŽADD15/‰AND.B‚#$F0,D0ALWAYSDUMPMULTIPLEOF16BYTES‰MOVE.L‚D0,CNTBYTE-PBA(A5)**…READFROMDISKETTE*‰CLR.LƒD7‘FLAG1STLINE1PMDMP6ƒMOVE.L‚ADRBGND-PBA(A5),D1‰STARTINGADDRESS%‰ADD.LƒADROFST2-PBA(A5),D1‰ADDOFFSET!‰MOVE.L‚CNTBYTE-PBA(A5),D2‰LENGTH&‰BLE…PMDMP30ŒBRANCHIFNOMORETODUMP.‰SUB.Lƒ#MAXBUF,CNTBYTE-PBA(A5)‚MAXIMUM#BYTES-‰BMI.SƒPMDMP8BRANCHIFREADISLESSTHANMAX#‰MOVE.L‚#MAXBUF,D2‰SETCOUNTTOMAX'PMDMP8ƒRD†D2,D1,RDBUF,PDSKERSƒREADDISK)‰LEA…RDBUF-PBA(A5),A3‹ADDRESSTOGETDATA0‰MOVE.L‚ADRBGND-PBA(A5),A4‰ADDRESSTOSTARTDUMP‰MOVE.L‚D2,D6Ž#BYTESTODUMP**†FORMATANDPRINTDUMPLINES*‰TST.W‚D7CHECKFOR1STLINE!‰BEQ.S‚PMDMP14ˆBRANCHIF1STLINE(PMDMP10‚MOVE.L‚A3,A0‰POINTERTO16BYTES6‰LEAƒHOLDLIN-PBA(A5),A1†BUFFERWITHPRECEDING16BYTES%‰MOVE.L‚#4,D0‰16BYTES=4LONGWORDS)PMDMP12‚CMP.L‚(A0)+,(A1)+„COMPARE4BYTES!‰BNE.S‚PMDMP14ˆBRANCHIFNOTSAME ‰SUB.L‚#1,D0 ‰BNE„PMDMP12"‰TST.W‚D7ŒHAS'SAME'BEENPRINTED?‰BMI.S‚PMDMP20‡BRANCHIFYES‰NOT.W‚D7ŒFLAG'SAME'PRINTED+‰LEA„SAMEABOV-PBA(A5),A1ƒADDRESSOFMESSAGE‰BSR„PRTL80ˆGOPRINTMESSAGE‰BRA.S‚PMDMP20* PMDMP14‚EQU„*!‰MOVE.L‚#1,D7ˆFLAG-NOT1STLINE!‰MOVE.L‚A3,A0ˆADDRESSOF16BYTES(‰LEA„HOLDLIN-PBA(A5),A1„SAVEFORCOMPARE‰MOVE.L‚(A0)+,(A1)+‰MOVE.L‚(A0)+,(A1)+‰MOVE.L‚(A0)+,(A1)+‰MOVE.L‚(A0)+,(A1)+**‰MOVE.L‚A3,A0‡ADDRESSOF16BYTESTOPRINT.‰LEA…PRTLIN-PBA(A5),A1ƒADDRESSOFPRINTBUFFER'‰MOVE.L‚A4,D0‡PHYSICALADDRESSTOPRINT&‰MOVE.L‚A4,D1‡LOGICALADDRESSTOPRINT6‰ADD.LƒADROFST2-PBA(A5),D0„ADDOFFSETTOPHYSICALADDR ‰BSR…FMTLIN†GOFORMATPRINTLINE‰LEA…PRTLIN-PBA(A5),A1‰BSR…PRTL80†PRINTIT**„INCREMENTTONEXTLINE* PMDMP20‚EQU„* ‰ADD.L‚#16,A4 ‰ADD.L‚#16,A3‰SUB.L‚#16,D2†DECREMENT#BYTES‰BGT„PMDMP10…BRANCHIFMORE/‰MOVE.LA4,ADRBGND-PBA(A5)…NEWSTARTINGADDRESS‰BRA„PMDMP6†GOREADMORE*!*‡DUMPFINISHED-CHECKLASTLINE* PMDMP30‚EQUƒ* ‰TST.W‚D7‰WASLASTLINEPRINTED?‰BPL.S‚PMDMP40„BRANCHIFYES(‰LEA„HOLDLIN-PBA(A5),A0‚CONTENTSOFLINE+‰LEA„PRTLIN-PBA(A5),A1ƒADDROFPRINTBUFFER&‰LEA„-16(A4),A4ƒBACKUPTOGETADDRESS‰MOVE.L‚A4,D0‡PHYSICALADDRESS‰MOVE.L‚A4,D1‡LOGICALADDRESS9‰ADD.LƒADROFST2-PBA(A5),D0‚ADDOFFSETTOPHYSICALADDRESS ‰BSR…FMTLIN†GOFORMATPRINTLINE‰LEA…PRTLIN-PBA(A5),A1‰BSR…PRTL80†PRINTITPMDMP40‚MOVEM.L(A7)+,A3-A4‰RTS‰PAGE*1*…MOVEABLOCKOFMEMORYFROMDISKTOBUFFERAREA*‡D1=STARTINGADDRESS*‡D2=NUMBEROFBYTES*‡A1=ADDRESSOFBUFFER* MOVEMEM‚EQUƒ**9*„CHANGEADDRESSIND1TOPSEUDOADDRESS(RRN*256+OFFSET)*‰MOVEM.L‚D1-D2/A1/A4,-(A7)‰LEA†RBLKIOS-PBA(A5),A0MOVEM2ƒMOVEM.L‚D1-D2/A1,-(A7) ‰BSR†CNVADREC ‰BNE†MOVEMRT1‰MOVEM.L‚D3-D5/A2-A3,-(A7)‰MOVE.LƒD1,D3‡STARTINGADDRESS ‰LSR.L„#8,D3‡CONVERTTOSECTOR#‰MOVE.LƒD3,IOSRRN(A0)‰MOVE.LƒA1,A3‡ADDRESSOFBUFFER‰MOVE.LƒD2,D4‡LENGTH ‰MOVE.LƒD1,D5‡ADRTOD5FORTEST/‰AND.L„#$FF,D5…DOESMOVESTARTONPAGEBOUNDRY?‰BEQ.S„MOVEM10…BRANCHIFYES/MOVEM4ƒLEA†RBUF-PBA(A5),A2…ADDRESSTOMOVEFROM‰ADD.L„D5,A2‡STARTHERE ‰NEG.L„D5/‰ADD.L„#$100,D5„#BYTESTOMOVEFROM1STSECTOR‰LEA†RBUF-PBA(A5),A4'‰MOVE.LƒA4,IOSSAD(A0)IOSSTARTADDRESS‰LEA†$FF(A4),A4%‰MOVE.LƒA4,IOSEAD(A0)IOSENDADDRESS ‰CLR.L„D/ 09‰CMP.L„SAVERRN-PBA(A5),D3ŠISTHISSAMEBLOCKREADBEFORE?‰BEQ.S„MOVEM6ˆBRANCHIFYES‰MOVE.Lƒ#-1,SAVERRN-PBA(A5)‰TRAP…#2$‰BNE.S„MOVEMEND‰BRANCHIFREADERROR1‰MOVE.LƒD3,SAVERRN-PBA(A5)ƒSAVERRNFORNEXTREADMOVEM6ƒADD.L„#1,IOSRRN(A0) ‰ADD.L„#1,D3)‰CMP.L„D5,D4‡HASTOTAL#BYTESBEENREAD?‰BGT.S„MOVEM8†BRANCHIFNO ‰MOVE.LƒD4,D5‡SET#READ=TOTAL-MOVEM8ƒSUB.L„D5,D4‡SUBTRACT#READFROMTOTAL(MOVEM9ƒMOVE.Bƒ(A2)+,(A3)+„MOVETOBUFFER‰SUB.L„#1,D5‡DECREMENTCOUNT#‰BNE†MOVEM9†LOOPBACKFORNEXTBYTE‰TST.L„D4ŠAREWEFINISHED?‰BEQ.S„MOVEMEND„BRANCHIFYESMOVEM10‚MOVE.LƒD4,D5‡BYTECOUNT!‰CLR.B„D5ŠMUSTREADWHOLESECTORS ‰TST.L„D5 ‰BEQ†MOVEM4!‰LSR.L„#8,D5‡CONVERTTO#RECORDS+‰MOVE.LƒA3,IOSSAD(A0)†READDIRECTTOBUFFER&‰ADD.L„#255,A3‡ADD255FORENDOFBUFF&‰MOVE.LƒA3,IOSEAD(A0)†ENDBUFFADDRESS‰SUB.L„#1,A3ŠPOINTTONEXTPAGEMOVEM12‚TRAP…#2‰BNE.S„MOVEMEND…BRANCHIFERROR ‰ADD.L„#1,D3‰MOVE.LƒD3,IOSRRN(A0)(‰ADD.L„#256,IOSSAD(A0)‚INCREMENTADDRESS&‰ADD.L„#256,IOSEAD(A0)‚ENDADDRESSTOO ‰SUB.L„#1,D5‰BNE†MOVEM12„GOREADNEXTREC ‰AND.W„#$FF,D4…ANYMORETOREAD?‰BNE†MOVEM4†BRANCHIFYES*MOVEMEND‚EQU„*‰MOVEM.L‚(A7)+,D3-D5/A2-A3 ‰TST.LƒD0MOVEMRT1 MOVEM.L (A7)+,D1-D2/A1‰BNE.SƒMOVEMRTS‰TST.LƒD3‹ISMOVECOMPLETE?‰BEQ.SƒMOVEMRTS…BRANCHIFYES-‰SUB.LƒD3,D2ˆSUBTRACT#BYTESLEFTFROMTOTAL‰ADD.LƒD2,D1ˆADDTOADDRESS‰ADD.LƒD2,A1ˆADDTOBUFFER#‰MOVE.L‚D3,D2ˆ#BYTESSTILLTOMOVE ‰BRA…MOVEM2"MOVEMRTS MOVEM.L (A7)+,D1-D2/A1/A4‰RTS‰PAGE*=*„CONVERTADDRESSTOPSEUDOADDRESS(REC#*256+BYTEOFSET)*CNVADRECEQU„*‰MOVEM.L‚D4-D5/A2,-(A7) ‰CLR.L‚D3‰TST.L‚D1ˆADDRESS(‰BMI.S‚CNVADR10ƒIFMINUS-WANTRECORD0!‰MOVE.L#7,D5…TABLEHAS8ENTRIES&‰LEA„SEGTABL-PBA(A5),A2ƒSTARTOFTABLE)CNVADR2‚TST.W‚SEGTYPE(A2)‚ISENTRYEMPTY?‰BEQ.S‚CNVADR5†BRANCHIFYES'‰MOVE.LSEGLADD(A2),D3‚STARTINGADDRESS ‰CMP.L‚D3,D1‡ISADDRESSEND?‰BMI.S‚CNVADR6…BRANCHIFNO2CNVADR4‚ADD.L‚#SEGENTSZ,A2ƒINCREMENTTONEXTENTRY‰DBRAƒD5,CNVADR2CNVADR5‚CLR.L‚D3‰MVHEX‚3,D1,MGBADAD‰MESGƒMGBADAR,MGBADARE‰MOVE.W#0,CCR.‰BRA.S‚CNVADRR…ERRORRETURN-NOSEGMENTFOUND*CNVADR6‚NEG.L‚D3)‰ADD.L‚D1,D3‡D3=#BYTESFROMSTARTOFSEG ‰CLR.L‚D1(‰MOVE.WSEGRECD(A2),D1ƒSTARTINGRECORD# ‰LSL.L‚#8,D1‰ADD.L‚D3,D1‡D1=PSEUDOADDRESS0‰ADD.L‚D2,D3‡TOT#BYTES+OFFSETFROMSEGSTART+‰SUB.L‚SEGSIZE(A2),D3ƒDOESWHOLEBLOCKFIT?‰BGT.S‚CNVADR8…BRANCHIFNO‰CLR.L‚D3‰#BYTESLEFTOVER&CNVADR8‚SUB.L‚D3,D2†#BYTESINSEGMENT$‰MOVEƒ#4,CCR†SETCCRFORGOODRETURNCNVADRR‚MOVEM.L(A7)+,D4-D5/A2‰RTS*CNVADR10CLR.L‚D1 ‰BRAƒCNVADRR‰PAGE*.*„MOVEONELINETOPRINTBUFFERINDUMPFORMAT**‡A0=ADDRESSOF16BYTESOFDATATOMOVE'*‡A1=ADDRESSOFPRINTLINE(80CHARS)*‡D0=PHYSICALADDRESS*‡D1=LOGICALADDRESS* FMTLIN‚EQU„*ˆMOVEM.L‚D0-D2,-(A7)"ˆMOVE.L‚A0,-(A7)„SAVEDATAADDRESS&ˆBSR„CONVHEX3…CONVERTPHYSICALADDRESS+ˆMOVE.B‚#'',D2…PUTBLANKIND2FORSPACING%ˆMOVE.B‚D2,(A1)+„BLANKBETWEENFIELDS ˆMOVE.L‚D1,D0%ˆBSRƒCONVHEX3†CONVERTLOGICALADDRESSˆMOVE.B‚D2,(A1)+&ˆMOVE.B‚D2,(A1)+„BLANKSBETWEENFIELDS!ˆMOVE.L‚#$10004,D1ƒ2COUNTSIND1$FMTLIN1MOVE.W‚#4,D1‡CONVERT4WORDSFMTLIN2MOVE.W‚(A0)+,D0&ˆBSR„CONVHEX2„PUT1WORDINPRINTLINE ˆMOVE.B‚D2,(A1)+ƒBLANKSEPARATORˆSUB.W‚#1,D1‡DECREMENTCOUNT ˆBNE„FMTLIN2'ˆMOVE.B‚D2,(A1)+ƒDOUBLEBLANKSEPARATORˆSWAPƒD1%ˆSUB.W‚#1,D1‡HAS2NDHALFBEENMOVED?ˆBEQ„FMTLIN1…BRANCHIFNOˆMOVE.BD2,(A1)++ˆMOVE.L(A7)+,A0„GETSTARTINGADDRESSAGAINˆMOVE.L‚#16,D1†8CHARACTERS%ˆBSR„MOVEASC…MOVESAMEBYTESINASCII ˆMOVE.B‚D2,(A1)+ƒBLANKSEPARATOR&ˆMOVEM.L‚(A7)+,D0-D2ƒRESTOREREGISTERSˆRTSˆPAGE*#*…CONVERTHEXINPUTTOBINARYVALUE* *ˆINPUT:ƒA0POINTSTOHEXNUMBER.*‘A1POINTSTOLONGWORDWHERERESULTISSAVED***ˆOUTPUT:‚CC=Z„INPUTENDSWITHBLANKORCR*‘CC=N„ILLEGALCHARACTERF0 OUND*‘CC=GTƒINPUTENDSWITHCOMMA.*‘A0=0IFCRFOUND,ELSEPOINTSTONEXTCHAR* HEXBINƒEQU„* ‰CLR.L‚D1 ‰MOVE.L‚A0,D0…TESTINPUTADDRESS‰BEQ.S‚HEXBINR1 ‰CLR.L‚D0(HEXBIN2‚MOVE.B‚(A0)+,D1ƒGET1INPUTCHAR‰CMP.B‚#'',D1…ISITBLANK?*‰BEQ„HEXBIN2…BRANCHTOSKIPLEADINGBLANKS‰BRA.S‚HEXBIN5*(HEXBIN4‚MOVE.B‚(A0)+,D1ƒGET1INPUTCHAR(HEXBIN5‚CMP.B‚#'0',D1…ISITLESSTHAN1?*‰BMI.SHEXBIN8†YES-GOLOOKFORSEPARATOR‰CMP.B#'F',D1†ISITHEXCHAR?&‰BHI.SHEXBINRI…BRANCHIFILLEGALCHAR‰CMP.B#'9',D1†ISIT0-9‰BLS.S‚HEXBIN6…BRANCHIFYES ‰CMP.B‚#'@',D1…ISITLEGALCHAR?‰BLS.S‚HEXBINRI„BRANCHIFNO‰SUB.B‚#7,D1‡CONVERTA-F!HEXBIN6‚AND.L‚#$F,D1†BINARYDIGIT!‰LSL.L‚#4,D0‡MULTIPLYBYSHIFTING ‰ADD.L‚D1,D0 ‰BRA„HEXBIN4* HEXBIN8‚EQU„*‰CMP.B‚#'',D1…ISITABLANK?‰BEQ.S‚HEXBINR2%‰CMP.B‚#',',D1…ISFINALCHARACOMMA?‰BEQ.S‚HEXBINR1„BRANCHIFYES!‰CMP.B‚#$D,D1†ISFINALCHARACR?‰BEQ.S‚HEXBINR3„BRANCHIFYES*‰ILLEGALCHARACTERHEXBINRINOT.W‚D1‰RTS*HEXBINR3LEAƒ0,A0„CRFOUND(HEXBINR2CLR.LD1†ENDEDWITHBLANKORCR#HEXBINR1MOVE.L‚D0,(A1)ƒSAVERESULT‰TST.W‚D1†SETCONDITIONCODES‰RTS‰PAGE**…CONVERTBINARYTOHEX*‡D0=BINARYVALUE(*‡A1=ADDRESSOFBUFFERTOSTORERESULT*CONVHEX4‚EQUƒ*CONVERT4BYTESŠMOVE.LD0,-(A7)ŠSWAPƒD0ŠBSR.S‚CONVHEX2ŠMOVE.L‚(A7)+,D0ŠBRA.S‚CONVHEX2*CONVHEX3‚EQUƒ*ŠMOVE.LD0,-(A7)ŠSWAPƒD0ŠBSR.S‚CONVHEX1ŠMOVE.L(A7)+,D0*CONVHEX2‚EQUƒ* ŠROR.L#8,D0ŠBSR.SCONVHEX1 ŠROL.L#8,D0*CONVHEX1‚EQUƒ* ŠROR.W#4,D0ŠAND.B#$0F,D0 ŠCMP.B#9,D0ŠBLS.S‚CONVHEXA ŠADD.B‚#7,D0CONVHEXA‚ADD.B‚#$30,D0ŠMOVE.BD0,(A1)+ ŠROL.W‚#4,D0ŠAND.B‚#$0F,D0 ŠCMP.B‚#9,D0ŠBLS.S‚CONVHEXB ŠADD.B‚#7,D0CONVHEXB‚ADD.B‚#$30,D0ŠMOVE.B‚D0,(A1)+ŠRTS***†CONVERTBINARYTODECIMAL-4CHARACTERS*CONVDEC4‚EQU…*ŠAND.Lƒ#$FFFF,D0†LIMITSIZEŠDIVU„#1000,D0‡GET1STCHAR ŠAND.Bƒ#$F,D0ŠADD.Bƒ#$30,D0ˆCONVERTTOASCIIŠMOVE.B‚D0,(A1)+‡SAVE1CHAR ŠCLR.WƒD0ŠSWAP„D0ŠDIVU„#100,D0ˆGETNEXTCHARŠADD.Bƒ#$30,D0ˆCONVERTTOASCIIŠMOVE.B‚D0,(A1)+‡SAVE1CHAR ŠCLR.WƒD0ŠSWAP„D0***†CONVERTBINARYTODECIMAL-2CHARACTERS*CONVDEC2‚EQU…*#ŠAND.Lƒ#$FF,D0ˆNUMBERMUSTBESMALLŠDIVU„#10,D0ˆSEPARATEDIGITS ŠAND.Bƒ#$F,D0ŠADD.Bƒ#$30,D0‡CONVERTTOASCIIŠMOVE.B‚D0,(A1)+‰SAVE1STCHARŠSWAP„D0‹GET2NDCHARŠADD.Bƒ#$30,D0‡CONVERTTOASCII#ŠMOVE.B‚D0,(A1)+†SAVE2NDCHARACTERŠRTSŠPAGE*!*…MOVEASCIIDATATOPRINTBUFFER*‡D1=NUMBEROFCHARACTERS*‡A0=ADDRESSTOMOVEFROM*‡A1=ADDRESSTOMOVETO* MOVEASC‚EQUƒ*"‰MOVE.B‚(A0)+,D0ƒGETONECHARACTER+‰CMP.Bƒ#$1F,D0„ISITLESSTHANPRINTRANGE?‰BLS.SƒMOVEASC2ƒBRANCHIFYES.‰CMP.Bƒ#$7B,D0„ISITGREATERTHANPRINTRANGE?‰BLS.SƒMOVEASC4ƒBRANCHIFNO7MOVEASC2MOVE.B‚#'.',D0„REPLACEUNPRINTABLECHARWITH.1MOVEASC4MOVE.B‚D0,(A1)+ƒSTORECHARINPRINTBUFF‰SUB.Wƒ#1,D1†DECREMENTCOUNT$‰BNE…MOVEASC„LOOPBACKFORNEXTCHAR‰RTS‰PAGE**‡INPUT/OUTPUTSUBROUTINES*L******************************************************************************ˆSETUPNEWOUTPUTDEVICE+*‹OUTPSRT‚HASPOINTERTOOUTPUTDESCRIPTION*NEWOUT: ‰LEALISTFHS-PBA(A5),A05‰MOVE.W‚#FHCLOS,FHSCMD(A0)ƒCLOSEWHATEVERISNOWOPEN‰TRAP#3NEWOUT1‚LEA‚LISTFHS-PBA(A5),A6 ‰BSR‚DEFAULTS-‰MOVE.LOUTPSRT-PBA(A5),A0ˆOUTPUTDESCRIPTION ‰BSR‚EDITFILE&‰TST.LD0ŒSYNTAXERRORINDESCRIPTION?‰BPL.SNEWOUT4‡BRANCHIFNO2NEWOUT2‚INPUTREENTERS,REENTERE„ASKFORNEWDEVICE ‰BSRSBARG‰BEQ.SNEWOUT3 ‰BSRC_EM_PGM ‰BRANEWOUT2 MNEWOUT3‚LEAINPTBUF-PBA(A5),A0POINTTOINPUTBUFFERINSTEADOFCOMMANDLINE.‰MOVE.LA0,OUTPSRT-PBA(A5) ‰BRAƒNEWOUT1* NEWOUT4‚EQUƒ*‰LEALSTIOS-PBA(A5),A06‰MOVE.B‚#LDFLUN,IOSLUN(A0)‡DEFAULTISSENDLISTTOCRT‰LEALSTIIOS-PBA(A5),A0‰MOVE.B‚#LDFLUN,IOSLUN(A0)A‰MOVE.W‚#$2020,PAGSLEWS-PBA(A5)‚CHANGESLEWTOBLANKLINEFORCRT)‰CLR.WƒPRINTER-PBA(A5)ŠFLAG-NOTPRINTER!‰BTST#1,D0”WASDEVICESPECIFIED?‰BEQ.SNEWOUT5‘BRANC0 HIFNO-‰BTST#14,D0“WASONLY#SPECIFIED?(VOLNULL)‰BNE.SNEWOUT9ABRANCHIFYES 5NEWOUT5‚LEALSTIOS-PBA(A5),A0‘MUSTASSIGNLISTDEVICE‰MOVE.B#3,IOSLUN(A0)‰LEALSTIIOS-PBA(A5),A0‰MOVE.B#3,IOSLUN(A0)‰LEA„LISTFHS-PBA(A5),A0‰MOVE.W#FHASGN,FHSCMD(A0)‰TRAPƒ#3!‰BEQ.SNEWOUT8‡BRANCHIFNOERRORNEWOUT7‚BSRC_EM_PGM ‰BRA„NEWOUT2* NEWOUT8‚EQU„*‰LEA„LISTFHS-PBA(A5),A0‰MOVE.W#FHRATT,FHSCMD(A0)‰TRAPƒ#3 ‰BNENEWOUT7%‰MOVE.W‚FHSWCD(A0),D0„ATTRIBUTESWORD ‰BTSTƒ#9,D0ˆISDEVICEAPRINTER?‰BEQ.SƒNEWOUT9†BRANCHIFNO‰MOVE.W‚D0,PRINTER-PBA(A5)4‰MOVE.W‚#$200C,PAGSLEWS-PBA(A5)ƒSETSLEWFORPRINTERNEWOUT9‚MOVE.L‚FHSSIZ(A0),D0‰BNE.SƒNEWOUT10NEWOUT9AMOVE.W‚#66,D0NEWOUT10SUB.Wƒ#10,D0 ‰CMP.Wƒ#40,D0 ‰BMI…NEWOUT9A‰MOVE.W‚D0,PAGESIZ-PBA(A5)‰MOVE.W‚D0,CNTLIN-PBA(A5)‰CLR.WƒPAGEONE-PBA(A5)‰RTS*)*…FILLINDEFAULTSINFHSPARAMETERBLOCK*DEFAULTSEQUƒ*"‰MOVE.L‚VOLNAME-PBA(A5),FHSVOL(A6)$‰MOVE.W‚USERNUM+2-PBA(A5),FHSUSN(A6)"‰MOVE.L‚CATALOG-PBA(A5),FHSCLG(A6)&‰MOVE.L‚CATALOG+4-PBA(A5),FHSCLG+4(A6)‰RTS‰PAGE**…SETUPINPUTFILE* NEWIN„EQU‚*+‰LEA‚CLINE-PBA(A5),A0‰STARTOFCOMMANDLINE‰LEA‚INPFHS-PBA(A5),A6E‰MOVE.WUSERNUM+2-PBA(A5),FHSUSN(A6)ƒPUTDEFAULTUSER#INPARAMBLOCK 7‰BSR‚EDITFILE‡CALLEDITFILEONTHEFILENAMEENTERED.‚IT"‰BMIERINVAL‰MUSTNOTBEADEVICE. ‰BTST#1,D0Š*‰BNEERINVAL‰* ‰FHSCALLINPFHS-PBA(A5)*œASSIGNTHEINPUTDEVICE.‰BNEFATALERRˆ* ‰RTS‰PAGE*,*…IFOUTPUTTOPRINTER-SLEWTOTOPOFPAGE* NEWPAGE‚EQU‚*,‰TST.WƒPRINTER-PBA(A5)ŒISOUTPUTTOPRINTER?‰BEQ.SƒNEWPAGER“BRANCHIFNO2‰MOVE.W‚PAGSLEWS-PBA(A5),-(A7)SAVESLEWCHARACTER(‰TST.WƒPAGEONE-PBA(A5)ŒISTHIS1STPAGE?‰BNE.SƒNEWPAGE2“BRANCHIFNO4‰MOVE.W‚#$2020,PAGSLEWS-PBA(A5)„DONOTSLEW1STTIME5NEWPAGE2ADD.Wƒ#1,PAGEONE-PBA(A5)‰FLAG-NOT1STPAGE:‰LEALSTIIOS-PBA(A5),A0ˆPUTSTART/ENDADDRESSESOFPAGSLEW6‰PEAPAGSLEWS-PBA(A5)ŠBUFFERINTOLSTIIOSPARAMBLOCK.‰MOVE.L(A7)+,IOSSAD(A0)‰PEAPAGSLEWE-PBA(A5)‰MOVE.L(A7)+,IOSEAD(A0)‰TRAP„#2&‰MOVE.W‚PAGESIZ-PBA(A5),CNTLIN-PBA(A5)‰MOVE.W‚(A7)+,PAGSLEWS-PBA(A5) NEWPAGER RTS‰SPC‚2*†DOIMAGEWRITETOOUTPUT* PRTLXIƒEQUƒ*‰LEALSTIIOS-PBA(A5),A0‰MOVE.L‚A1,IOSSAD(A0)‰MOVE.L‚A2,IOSEAD(A0)PRTLXI1‚LEA„LSTIIOS-PBA(A5),A0‰TRAPƒ#2‰BNE.S‚PRTLXI2‰RTS*PRTLXI2‚BSR.SPRTLASK ‰BRAƒPRTLXI1ˆSPC‚2*†DOFORMATTEDWRITETOOUTPUT**†PRTLXX-PRINTONELINE&*†PRTL80-PRINTONE75CHARACTERLINE* PRTL80ƒEQU‚*‰LEA…74(A1),A2ŽSETENDADDRESS PRTLXXƒEQU‚*,‰TST.WƒPRINTER-PBA(A5)ˆISOUTPUTTOPRINTER?‰BEQ.SƒPRTLXX2BRANCHIFNO-‰SUB.Wƒ#1,CNTLIN-PBA(A5)†DECREMENTLINECOUNT,‰BPL.SƒPRTLXX2BRANCHIFNEWPAGENOTNEEDED ‰BSR…NEWPAGEPRTLXX2‚LEALSTIOS-PBA(A5),A0‰MOVE.LA1,IOSSAD(A0)‰MOVE.LA2,IOSEAD(A0)PRTLXX4‚LEA‚LSTIOS-PBA(A5),A0‰TRAP‚#2‰BNE.S‚PRTLXX6ŠBRANCHIFERRORS‰RTS*PRTLXX6‚BSR.S‚PRTLASK ‰BRA„PRTLXX4*%*„PRINTERERROR-ASKUSERWHATTODO*PRTLASK: ‰BSRC_EM_PGMˆPRINTTHEERROR. =PRTLXXB‚INPUT‚RETRYS,RETRYEŠASKTHEUSERIFHEWANTSTORETRY ‰BSRSBARG•ANDGETHISRESPONSE.‰BEQ.SPRTLXXB1*‰BSR.SC_EM_PGM*‰BRAPRTLXXB“* PRTLXXB1LEA„INPTBUF-PBA(A5),A11PRTLXXC‚MOVE.B‚(A1)+,D0ˆCHECKONEINPUTCHARACTER‰CMP.B‚#'Y',D0‰BEQ.SƒPRTLXXR‰GOBACKTORETRY‰CMP.B‚#$D,D0‰LOOKFORCARRET&‰BEQ„PRTLXXBˆIFCARRET-GOTRYAGAIN‰CMP.B‚#'N',D0ˆDIDUSERSAYNO#‰BNE„PRTLXXCˆBRANCHTOKEEPLOOKING$‰BRA„CMDPRO‰DON'TRETURNIFNORETRY PRTLXXR‚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Š'INVALIDENTR1 Y'ERROR.***J***************************************************************************2*ˆROUTINETOCALLERRORMESSAGEHANDLER,THENDIE.*J*************************************************************************** FATALERR:‰BSR.S…C_EM_PGM2ERREXIT‚ERQ.TERM‚#0,#$C000‹EXITWITHERRORSTATUS.***M******************************************************************************,*’CALLTOERRORMESSAGEHANDLER.‚OUTPUTGOES.*’TOLU6.‚SETSTERMINATIONSTATUSTO'ERROR'.**ˆCALL†BSR‡C_EM_PGM*A*ˆINPUTS„D0ANDA0SETBYIOSORFHSCALL,ORD0FORNONIOS/FHS.*"*ˆOUTPUTSƒNOREGISTERPRESERVATION*N******************************************************************************* C_EM_PGM:C‰MOVEM.LƒD0/A0,EM_PBLK-PBA(A5)ƒSAVED0,A0INERRORMSGPARAMBLOCK.8‰LEA‡EM_PBLK-PBA(A5),A0†POINTA0TOTHEPARAMETERBLOCK.:‰MOVE.B„#6,EM_TLUN-EM_PBLK(A0)‚SETTHELUFOROUTPUTTO6. ‰MOVE.L„#2,D0‰TRAP†#4 =‰BTST†#0,LOGUNTS+3-PBA(A5)ƒCHECKWHETHERWE'REBEINGRUNFROM.‰IF‚‚THEN.S‘ACHAINFILE.‚IFSO,TERMINATE2‹ERQ.TERM‚#0,#$C000ŒWITHERRORSTATUSIMMEDIATELY.‰ENDI ‰RTS †ENDBEGINééééé=/* =/*†RENAME.AF=/*)=/* Chain file to assemble RENAME utility=/*:=/* If no output argument is specified for the listing the(=/* chain file will default to RENAME.LS=/*=/IFC \1ƒ=ARGRENAME.LS=/ENDIF=/*"=ASM RENAME.SA,RENAME.RO,\1;RZ=106=/*{ Included files are:=/*ƒ9995.&.FME.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.&.TR1.EQ=/*}=/*=ENDéééé1 éé"=/* =/*†RENAME.LF=/*'=/* Link chain file to create RENAME.LO=/*:=/* If no output argument is specified for the listing the(=/* chain file will default to RENAME.LL=/*=/IFC \1ƒ=ARGRENAME.LL=/ENDIF=/*=LINK ,RENAME.LO,\1;AHMIXATTRIBUTES D PSEG SEG0:0,14 $0000INPUT RENAME.ROLIB 0.&.UTILIB.ROEND=/*=ENDéééééé+‰LIST'RENAMEƒIDNT4,0VERSADOSRENAMEUTILITY ‰LLEN120<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;*************************************************************%*‹PROGRAMNAMEIS‚RENAM.DATA****ˆ***ˆRENAMECOMMANDƒ******%*ˆTHISCOMMANDWILLASSIGNANEWNAME.*ˆ(USERNUM,CATALOGUE,FILEOREXTENSION)TOAN*ˆEXISTINGFILE.*ˆTHEREWILLBENODATACONVERSIONOFTHEFILE*ˆDURINGTHERENAMEPROCESSING.* *ˆREV1.00!*ˆREGISTERSUSED:01234567*’D…********’A…*********=**************************************************************‰PAGE**ˆMODIFICATIONHISTORY*ˆ2/2/84@*ˆCHANGESHAVEBEENMADETOTHELIBRARYMODULE'EDITFILE'INTHE@*ˆLIBRARY'UTILIB.RO'.THOSECHANGESIMPACTEDTHELOGICTHATWAS<*ˆINTHERENAMEUTILITYBECAUSETHEBITSETTINGRESULTSFROM=*ˆEDITFILEWERENOLONGERCOMPATABILEWITHTHEEXISTINGLOGIC>*ˆCONSEQUENTLYNEWLOGICWASREQUIREDTOMEETTHENEWEDITFILE*ˆBITSETTINGRESULT2 S*‰PAGE***ˆINCLUDEFILES***ˆINCLUDE9995.&.FME.EQ*ˆINCLUDE9995.&.IOE.EQ*ˆINCLUDE9995.&.TR1.EQ**‰NOLIST‰INCLUDE9995.&.FME.EQ‰INCLUDE9995.&.IOE.EQ‰INCLUDE9995.&.TR1.EQ‰LIST**‰PAGE**ˆ***ƒRENAME‚COMMAND‚DATASECTION‚****ˆ****‚EQUATEAREA‚*******#STKLENƒEQU25‹STACKLENGTHINWORDS)BUFSIZE‚EQU160‰INPUTCOMMANDBUFFERSIZE DSKLUIƒEQU1!LISTLUƒEQU3‹LISTINGLOGICALUNIT DIRLU„EQU4TSKNAMƒEQU'NAME'†MYTASKNAMESECLENƒEQU256‰SECTORLENGTH7RWBITSƒEQU$30000†READWRITEBITSFROMEDITFILEROUTINEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*º2/2/84>NULLBITSEQU$FC00‡NULLFIELDFOUNDBITSFROMEDITFILEROUTINE*º2/2/84O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BN00…EQU0‹BITNBR0* ‰SECTIONƒ0!‰XREFƒPARSE,OPTION,EDITFILE,SBARG***ˆNEXTWORDBOUNDRYMACRO**2*************************************************** 4T=TESMQUf]JeVmJuJ}A…SN•XI¥p­Nµ=****„DATASEGMENT(DSEG)ƒ****1***************************************************PBA†EQU*…PGMBASEADDR**-‰DC.B'1220844'…MMDDYY-REVCODE-VERSADOSREV*œREVCODEDEF.* SPACE-CLEANASSM. *¤P-PATCHED*¤C-CUSTOMIZEDPATCH‰PAGE;**************************************************************ˆ***ƒDATAAREA‚******:************************************************************ ‰DS.LSTKLEN PROGSTK‚EQU**‰DC.L0‰DS.W08*+++++++++++++++++++++++++++++++++++++++++++++++++++++++*,*ˆ***ƒBUFFINISTHEAREATHECOMMANDLINEIS.*ˆ***ƒREADINTOWHENTHISPROGRAMISCALLEDIN*8*+++++++++++++++++++++++++++++++++++++++++++++++++++++++**BUFFINƒCOMLINEBUFSIZE…***‚INPUTBUFFER‚***-**********************************************‰DS.W0*3*****************************************************ŒIOSPARAMETERTABLE(*ˆSETUPIOS(ERR0R-LOG)‚PARAMETERBLOCK*3****************************************************6‰IOS.OUT6IOWRIT,IOPASC+IOPFOR+IOPWAT,LDFLUN,0,0,0,0,07‰IOS.OUT6IIOWRIT,IOPASC+IOPIMG+IOPWAT,LDFLUN,0,0,0,0,0'‰IOS.OUTINIOREAD,IOPFOR,CDFLUN,,,0,0,2‰PAGE‰DS.W0**ˆSETUPIOSFORLISTINGLU3*6‰IOS.OUT3IOWRIT,IOPASC+IOPFOR+IOPWAT,LISTLU,0,0,0,0,0‰DS.W07‰IOS.OUT3IIOWRIT,IOPASC+IOPIMG+IOPWAT,LISTLU,0,0,0,0,0‰PAGE"***********************************8*ˆFHSPARAMETERTABLEFORCHANGELOGICALUNITASSIGNMENT5*ˆCHANGEISFROM6TO3-SENDSOURCEISLUAINMASK*ˆANDRECEIVEISLUBINMASK4*ˆLU3ISUSEDF0RLISTINGANDLU6FORERR0R/LOGGING**3*ˆPARAMETERTABLEFORCHANGLOGICALUNITASSIGNMENT,*ˆISDIFFERENTFROMSTANDARTPARAMETERTABLE*%************************************** LU3AFHSƒEQU*'‰DC.WFHCHLU„COMMAND(CHANGELUASSIGN)‰DC.WFOPKEP…OPTIONKEEPASSIGN‰DC.B0ŠSTATUS‰DC.BLDFLUNŠSENDLUNUMBER‰DC.BLISTLUŠRECEIVELUNUM‰DC.B0ŠRESERVED&‰DC.L0ŠTASK-ID(0MEANSUSEYOURSELF)(‰DC.L0ŠSESSION#(0MEANSUSEYOURSELF)*‰DS.W0)******************************************?*ˆLU3FHSISPARMTABLEFORLU3WHICHISUSEDFOROUTPUTLISTING*********************************************"‰FHS.LU3FHCLOS,0,LISTLU,0,0,0,0,0 ‰DC.L0,0,0*$*************************************:*ˆ***‚LU6FHSISTHEPARAMETERTABLEFORFHSFORTHEOUTPUT?*ˆ***‚WHICHNORMALLYGOESTOTHETERMINALFORERR0RSORLOGGING**"***********************************‰FHS.LU60,0,LDFLUN,0,0,0,0,0 ‰DC.L0,0,0‰DS.W0*;************************************************************:*ˆ***DSKFHSISTHEPARAMETERTABLEFORTHEFHSINPUTFILE*;***********************************************************INFHS„DC.WFHASGNŒCOMMAND*‰DC.WFOPEREWŠOPTIONSEXCLUSIVEREAD/WRITE‰DC.B2 0ŠSTATUS ‰DC.BDSKLUI†LOGICALUNITNUMBER INVOL„DC.L$20202020‚VOLUMENAME‰DC.W0ŠUSERNUMBER‰DC.L$20202020ˆCATALOGNAME‰DC.L$20202020‰DC.L$20202020ˆFILENAME‰DC.L$20202020‰DC.W$2020ŠEXTENSION‰DC.W0ŠRESERVED‰DC.B0ŠWRITEPROTECTCODE‰DC.B0ŠREADPROTECTCODE‰DC.W0ŠLOGICALRCORDLENGTH0‰DC.L0ŠCONTIGUOUSFILESIZE/DIRENTRYPOINTER6*ˆFOLLOWINGFHSPARAMENTERSFORSHAREDSEGMENTREQUEST(‰DC.L0ŠSEGMENTSTARTINGLOGICALADDRESS$‰DC.L0ŠSEGMENTENDINGLOGICALADDR.3‰DC.L0ŠLENGTHOFPARMBLOCKFORSHAREDSEGREQUEST‰DS.W0**%*ˆFHSPARAMETERBLOCKFORDISKOUTPUT* OUTFHSƒEQU*‰DC.WFHASGN…COMMAND ‰DC.WFOPPWŠOPTIONS-PUBLICWRITE‰DC.B0ŠSTATUS‰DC.BDSKLUI…LOGICALUNITNUM!OUTVOLƒDC.L$20202020‚VOLUMENAME‰DC.W0ŠUSERNUM‰DC.L$20202020ˆCATNAME‰DC.L$20202020‰DC.L$20202020ˆFILENAME‰DC.L$20202020 ‰DC.W$2020‰DC.W0‰DC.B0ŠWRITEPROTCODE‰DC.B0‰DC.W0‰DC.L0ŠCONTFILESIZE ‰DC.L0,0,0‰DS.W0*"*VOLUMEASSIGNMENTFORFAMILYAND**ˆPARAMETERBLOCKFORFETCHDIRECTORYCALL DIRFHSƒEQU*‰DC.WFHFDEN…CMD‰DC.WFOPPR†OPTIONS‰DC.B0ŠSTATUS‰DC.BDIRLU†LOGUNIT‰DC.L$20202020‚VOL‰DC.W-2‰USERNUMDIRCATƒDC.L'„'…CATALOGUE ‰DC.L'„'‰DC.L'„'…FILE ‰DC.L'„' ‰DC.W'‚'‡EXT‰DC.W0‰DC.B0‰DC.B0‰DC.W0‰DC.L0…DIRADDRPARM*‰DS.W0&*ˆDIRECTORYENTRY(DIR)DATASTRUCTURE'*ˆTHEDIRENTRYISREADINTOTHISBLOCK*DIRBLKƒDS.BFDLEN*ˆDS.W0;***********************************************************DIRVOLƒDC.WFHASGN‡COMMAND‰DC.WFOPPRŠOPTIONSPUBLICREAD‰DC.B0ŠSTATUS‰DC.BDIRLU†LOGICALUNITNUMBER‰DC.L$20202020‚VOLUMENAME‰DC.W0ŠUSERNUMBER‰DC.L$20202020ˆCATNAME‰DC.L$20202020‰DC.L$20202020ˆFILENAME‰DC.L$20202020 ‰DC.W$2020‰DS.L3(‰DC.L0ŠSEGMENTSTARTINGLOGICALADDRESS$‰DC.L0ŠSEGMENTENDINGLOGICALADDR.3‰DC.L0ŠLENGTHOFPARMBLOCKFORSHAREDSEGREQUEST‰DS.W0**'HOLDFUSNDC.W0„FAMILYUSERNUMBERMASK*’HOLDMASKOUTPUTFORFAMILYHOLDFAM‚DC.L'„'ƒCAT ‰DC.L'„'‰DC.L'„'ƒFILE ‰DC.L'„' ‰DC.L'‚'…EX‰DS.W08*********************************************************8**********************************************************ˆ***ƒWORK‚AREAƒ******9**********************************************************STSKNAM‚DC.L0‰SAVETASKNAMESESNUMƒDC.L0ˆSAVESESSIONNUM#VOLNAMƒDC.L0‰SAVEVOLDEFAULTNAME‰DC.W0/USERNUM‚DC.W0ŠDEFAULTUSERNUM(16BITBINARY)*CATNAMƒDC.L0,0‡SAVEDEFAULTCATAGORYNAME R_D67A01:‰DS.L4ŠREGSD6,D7A0A1‰DC.W0ŠTOPHALFA2‰DC.W0ŠLOGONUSERNUM‰DS.L6‰SAVEOTHERREGISTERSSAVNAMƒDS.L6ŠSAVEFULLNAME&INCODEP‚DC.W0„SAVEINPUTPROTECTCODE(OUTCODEPDC.W0…SAVEOUTPUTPROTECTCODE0SAVOADD„DC.L0Š1STTIMEFLAGFORPRTDETAILLINE"OFLAG„DC.L0„MOVEOUTPUTADDR/FLAG"PROTINƒDC.W0ŽSAVEINPUTPROTCODE$PROTOUT‚DC.W0ŽSAVEOUTPUTPROTCODEMSGANSƒDC.W'…'MSGANSE‚EQU*-1%ISDEV„DC.B0ŠINPUTOROUTPUTWSADEV&FLAGOCƒDC.B0…CHANGEPROTECTCODEFLAG1FLAGP„DC.B0ŠPROTECTONLYINOUTPUTCMDLINEFLAG!FAMIFLAGDC.B0„FAMILYFLAGINPUTERFLAGƒDC.B0„FAMILYERRORSEL†DC.B0„SELECTINDICATOR*‰DS.W0.************************************************ˆSTARTOFMESSAGES&BUFFERS*.**********************************************DIRMSGƒEQU*ŒSTARTOFDIRMSG%VOLPRTƒDC.L'„'…VOLUMENAMEGOESHERE ‰DC.W':'L1USN„DC.L0ŠUSERNUM ‰DC.W'.'L1CAT„DC.L'„'…CATALOGUE ‰DC.L'„' ‰DC.W'.'L1FIL„DC.L'„'…FILENAME ‰DC.L'„' ‰DC.W'.'L1EXT„DC.W'‚'‡EXTENSION DIRMSGE‚EQU*‰DS.W0 COPAM„EQU*,‰DC.B'RENAMEALLORSELECTFILES(A/S)?'COPAMEƒEQU*-1‰DS.W0* COPOK„EQU*‰DC.B'OKTORENAME(Y/N/Q)?‚'COPOKEƒEQU*-1COPOKBƒDS.B40‰FILENAMECOPOKBE‚EQU*-1**‰DS.W0** PMSG…EQU*+‰DC.B'BOTHPROTECTIONCODESAREREQUIRED' PMSGE„EQU*-1‰DS.W0* GOODM„EQU*‰DC.B'RENAMEWASSUCCESSFUL'GOODMEƒEQU*-1‰DS.W†0X00100:‰DC.B†'RENAMEVERSIONNUMBER'X00110: ‰DC.B†'ˆ'3 X00199ƒEQU‡*-1‰DS.W†0‰PAGE***’ERRORMESSAGEPARAMETERBLOCK**EM_PBLK: EM_DO:ƒDC.L†0"*œD0-IOS/FHSRETURNERRORSTATUS*œ(ERRORMSGKEYVALUE) EM_A0:ƒDC.L†0"*œA0-ADDROFI/OPARAMETERBLOCKEM_OPT:‚DC.B†0*œOPTIONSFLAG*œBIT‡MEANINGIFSET*0ˆQUERYRESPONSEDESIREDEM_TLUN:DC.B†0*œUSERTERMINALLUN-(LDFLUN)EM_QRC:‚DC.B†0*œQUERYRETURNCHARACTEREM_KLUN:DC.B†0*œUSERKEYBOARDLUN-(CDFLUN)EM_SPA:‚DC.L†0'*œSTARTADDRESSFORUSERTEXTPLUGPOOLEM_EPA:‚DC.L†0%*œENDƒADDRESSFORUSERTEXTPLUGPOOL‰PAGE‰DS.W0*&ENDDATA‚EQU*‹***ENDOFDATAAREA‚***‰PAGE BEGPROC‚EQU**<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<***************************************************************ŽRENAMECOMMAND/*ˆ***‚PROCEDURESECTIONFORRENAMECOMMAND‚******<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;*************************************************************STARPROG EQU *‰LEA‡PBA(PC),A7*&***************************************.*ˆ**ƒSAVEDEFAULTVALUEPASSEDFROMSYSTEM****'*****************************************;‰MOVEM.LD0-D7/A0-A7,STSKNAM-PBA(A7)SAVEREGISTERCONTENTS(‰LEAPROGSTK(PC),A7‚SETUPSTACKPOINTER!‰LEAPBA(PC),A5†SETPGMBASEADDR+*ˆD0TOSTSKNAM=TASKNAMETHATSTARTEDME*ˆD1TOSESNUM‚=SESSIONNUM$*ˆD2TOVOLNAM‚=DEFAULTVOLUMENAME*ˆD3TOUSERNUM=USERNUMBER*ˆD4TOCATNAM‚=CATALOGUENAME*ˆD5TOCATNAM+4**ˆD6‹=‚LENGTHOFCOMMANDLINE)*ˆD7=BITMASKOFLOGICALUNITSASSIGNED*ˆA0=YOURTASKNAME*ˆA1=TERMINALID*ˆA2=ACTUALUSERNUMBER(*ˆA3=SYSTEMVOLUMEDEFAULE(ALLSPACES)*ˆA4=SYSTEMUSERNUMBER*ˆA5=SYSTEMCATALOGUE*ˆA6=SYSTEMCATPART2**5*ˆASSIGNMENTOFSEND&RECEIVELU'SISDONEBYSYSTEM‰PAGE‰LEAMSGANS(PC),A0"‰MOVE.LA0,OUTINIOS-PBA+IOSSAD(A5)‰LEAMSGANSE(PC),A0"‰MOVE.LA0,OUTINIOS-PBA+IOSEAD(A5)‰LEADIRBLK(PC),A0 ‰MOVE.LA0,DIRFHS-PBA+FHSSIZ(A5)****„DRIVER‚BLOCK„***** ‰BTST#3,D7ŠLU3ALREADYASSIGNED‰BNE.SDOBUFFˆYES-**********************************************.*ˆROUTINETOASSIGNLOGICALUNIT3TOTERMINAL+*ˆBYSETTINGITUPTHESAMEASLU6WHICHIS"*ˆALREADYASSIGNEDTOTHETERMINAL*.***********************************************‰FHSCALLLU3AFHS(PC)‰BNE‚IOERPRT…BAD*3***************************************************&*‰*****CALLCOMMANDPARSEROUTINE‚***3****************************************************/DOBUFFƒLEABUFFIN(PC),A0‚SAVEBUFFERSTARTADDR ‰BSRPARSE ‰MOVE.L„A2,D6*œD6=STARTADDRESSFOROPTIONS!‰MOVEA.LA5,A2‚SAVEPGMBASEADDR‰TST.LD0‡CKF0RANYERR0RS‰BMIERR1‡BRIFERR0R ‰TST.L…D6 ‰BNE‡X01000*œJMPIFOPTIONSSPECIFIED**********************************************ZEROINA1MEANSNOOUTPUT*********************************************'‰CMP.L#0,A1‚A1CONTAINSADDROFOUTPUT#‰BEQERR1…NOOUTPUTINCOMMANDLINE.‰MOVE.LA1,SAVOADD-PBA(A5)‚SAVEOUTPUTADDRESS&‰BSR.SINITIN…GOTOINPUTINITROUTINE‰BSRINITOUT…GOTOOUTPUTINIT ‰TST.LOFLAG-PBA(A2)MOREOUTPUT‰BEQ.SCKFAM‰NO ‰BSRNEWOUT.***********************************************ŽCHECKFORFAMILYCONDITION.**********************************************,CKFAM„TST.BFAMIFLAG-PBA(A2)‚FAMILYCONDSET‰BNEFAMILYESˆYES*1*************************************************!*ˆGOTORENAMEROUTINE‚FORSINGLE1**************************************************"‰BSRRENAMEIT‹GOTORENAMEROUTINE*‰BSRGOODR‹PRTGOODRENAMEMSG*)***************************************** *ˆSTOPTHEPROGRAMATTHISPOINT)*****************************************‰LEAINFHS(PC),A6ƒINITREG0‰MOVE.W#FHCLOS,FHSCMD(A6)‚CLOSECOMMANDTOPARM‰FHSCALLINFHS(PC)‰BEQ.SSTOPNOW ‰BSRIOERPRTR*‰PAGE**2*ˆALLUTILITIESWILLTERMINATEBYCALLINGƒERQ.TERM:*ˆHOWEVER-ANINDICATIONASTOWHETHERTHEREWASANERROR5*ˆWHICHMIGHTCAUSECHAINPROCESSINGTOABORTMUSTBE9*ˆSPECIFIEDATTHETIMEOFTHETERMI3 NATION.THEFOLLOWING8*ˆWILLDEFINETHETYPEOFTERMINATIONTHATARECURRENTLY *ˆPOSSIBLE:*8*’NORMALTERMINATION‚-IMPLIESTHATUTILITYSUCCESSFULLY *¨COMPLETED**œEITHER„ERQ.TERM*œORˆERQ.TERM#0,#0**:*’ERRORTERMINATIONƒ-IMPLIESTHATUTILITYTERMINATEDWITH *¨ANERROR**¦ERQ.TERM#0,#$C000*<*’WARNINGTERMINATION-IMPLIESTHATUTILITYTERMINATEDWITH*¨AWARNING(ie.ASSEMBLY)**¦ERQ.TERM#0,#$1000** TERM_FLG:‰DC.W†0‰TERMINATIONFLAG *œBIT‡MEANING*ž0‡0-->NORMAL‚TERMINATION*¦1-->ERRORƒTERMINATION**ž1‡1-->WARNINGTERMINATION**STOPNOW:‰LEA‡TERM_FLG(PC),A0*œA0=ADDROFTERMINATIONFLAG ‰BTST†#1,(A0)‰BNE.S…TERM0100*œJMPIFWARNINGTERMINATION ‰BTST†#0,(A0)‰BNE.S…TERM0200*œJMPIFERRORTERMINATION ‰ERQ.TERM*œEXITNORMALTERMINATION TERM0100:‰ERQ.TERM#0,#$1000*œEXITWARNINGTERMINATION TERM0200:‰ERQ.TERM#0,#$C000 ‰PAGE/************************************************)*ˆ***‚SETUPFHSPARMBLOCKFORINPUT****7*ˆTHISROUTINEWILLINITIALIZETHEINPUTFILEPARAMETER*/************************************************ INITIN„EQU*%‰LEABUFFIN(PC),A0‚ADDROFSTARTSCAN(‰LEAINFHS(PC),A6‚ADDROFFHSPARMBLOCK!‰BSRƒINITDSK…GOTOINITDISKSUBR*&****************************************ˆ**ƒCALLEDITFILEROUTINE***ˆA0=INPUTCOMMANDSTART*ˆA6=ADDROFPARMBLOCK*&***************************************!‰BSREDITFILE„MAKEEDITFILECALL‰BMIERR1ˆERR0R ‰MOVE.W„D0,D6‰AND.W…#$0C00,D6**œD6=ISOLATEDFILEANDEXTENSIONNULLBITS*ŸFORTHEINPUTFILE ‰BNE‡ERR1-*œJMPIFFILEAND/OREXTENSIONBITSWERENULL/*œTHEINPUTFILENAMEAND/ORTHEFILEEXTENSION *œAREMISSING#‰BTST#7,D0ŠCKFORFAMILYCONDITION‰BEQ.SINITIND‡NO‰BTST#6,D0…FAMILYVOLUME‰BNEERR1‡ERROR‰MOVE.BD0,FAMIFLAG-PBA(A2)/‰MOVE.WFHSWCD(A6),PROTIN-PBA(A2)‚SAVEPASSWORD‰BRA.SINITEXŠEXIT INITIND‚BTST#1,D0†CKFORDEVICE‰BEQ.SINITIN1…NO‰MOVE.B#1,ISDEV-PBA(A2)* INITIN1‚EQU* ‰LEAINVOL(PC),A1ˆSAVEFULLNAME‰LEASAVNAM(PC),A2 ‰MOVE.L#6,D1INITINL‚MOVE.L(A1)+,(A2)+ ‰SUB#1,D1 ‰BNEINITINL$‰LEAPBA(PC),A2ŠRESTOREPGMBASEREG*2***************************************************ŠASSIGNDISKINPUTVOL‚***5*ˆCOMMAND,VOLNAMEANDLU#ARESETUPINPARMBLOCK/************************************************)‰MOVE.W#FHASGN,FHSCMD(A6)†ASSIGNCOMMAND‰FHSCALLINFHS(PC)'*Š**‚RETURNFROMFILEHANDLERSYSTEM**‰BEQ.SINITIN2†NOERROR‰TST.BFAMIFLAG-PBA(A2)‚FAMILY‰BEQ.SINITER1‡NO(‰MOVE.BD0,ERFLAG-PBA(A2)ƒSAVEERRORIND ‰RTS‡.‰RETURN*)INITER1‚CMP.B#7,D0…PROTECTIONCODEERROR‰BEQPROTPRT…YES‰CMP.B#6,D0…INVALIDINPUT‰BEQINVALERR„YES‰BRAIOERPRTR„OTHERTYPEERRORAINITIN2‚MOVE.WFHSWCD(A6),INCODEP-PBA(A2)ƒSAVEINPUTPROTECTCODE INITEXƒRTS.RETURNFROMROUTINE‰PAGE-*ˆSUBROUTINETOINITPARMWITHDEFAULTVALUES* INITDSK‚EQU*'‰MOVE.L#'„',FHSFIL(A6)‚BLANKFILENAME‰MOVE.L#'„',FHSFIL+4(A6),‰MOVE.W#'‚',FHSEXT(A6)‚BLANKEXTENSIONNAME INITDSK1:-‰MOVE.LVOLNAM-PBA(A2),FHSVOL(A6)VOLUMENAME4‰MOVE.WUSERNUM-PBA(A2),FHSUSN(A6)USELOGONUSER#)‰MOVE.LCATNAM-PBA(A2),FHSCLG(A6)CATALOG%‰MOVE.LCATNAM+4-PBA(A2),FHSCLG+4(A6) ‰RTS.RETURN*‰PAGE1****************************************************ˆROUTINETOPERFORMOUTPUTINITIALIZATION*1************************************************** INITOUT‚EQU*‰TST.BFAMIFLAG-PBA(A2)‚FAMILY‰BEQ.SINITOUT1†NO'‰LEAOUTFHS(PC),A6‡POINTATFAMILYPARM‰BRA.SINITOUT2/INITOUT1LEAINFHS(PC),A6„INPUTPARMBLOCKADDR'‰TST.BISDEV-PBA(A2)‚WASINPUTADEVICE‰BNE.SINITOUT2„YES&‰BSRINITDSK1„INIITDEFAULTDESTVALUE ‰BRA.SOUTA-INITOUT2BSRINITDSK…INITOUTPUTWITHDEFAULT**,OUTA…MOVE.LSAVOADD-PBA(A2),A0‚STARTOFSCAN*4*****************************************************ˆCALLEDITFILEROUTINE*ˆA0HASADDROFSTARTOFSCAN*ˆA6HASADDROFFHSPARMBLOCK*4**************************4 ***************************/************************************************'*ˆCALLTOEDITFILETOSETUPPARMBLOCK*1************************************************** ‰BSREDITFILE‰TST.LD0ŠCKFORERR ‰BMIERR1ˆYES0‰BCLR#0,D0ŠMOREOUTPUT-CLBECAUSEOFLATERTEST ‰BNE‚ERR1ŠNO!‰CMP.B#',',D1‰TERMINATORACOMMA‰BNE.SOUTBŒNO,‰MOVE.LA0,OFLAG-PBA(A2)‚SAVEPOINTER&FLAG"OUTB…BTST#1,D0‡CKFORDEVICEFLAG‰BEQ.SOUTCˆNO‰ADD.B#1,ISDEV-PBA(A2)7‰CMP.B#2,ISDEV-PBA(A2)‚AREBOTHINPUT&OUTPUTDEVICES‰BNEERR1ˆNOISERROR#‰BRA.SOUTEXIT…BOTHAREDEVGETOUT OUTC…EQU**ˆNOTANOUTPUTDEVICE(‰TST.BISDEV-PBA(A2)‚ANYDEVICESETTINGS ‰BNEERR1ˆYES*5*ˆCKFORPROTECTCODEONLYONOUTPUTPARTOFCMDLINE*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*º2/2/84‰CMP.L…#RWBITS+NULLBITS,D0+‰BEQ.S…OUTD†JMPIFPROTECTCODECHANGEONLY ‰MOVE.L„D0,D6*œD6=EDITFILESTATUS‰AND.L…#RWBITS,D6#*œD6=ISOLATEDR/WPROTECTCODEBITS ‰BEQ.S…OUTD1*œJMPIFNOPROTECTCODECHANGE*º2/2/84O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰CMP.L…#RWBITS,D6 ‰BNE‡PERR1*œJMPIFCHANGETOBOTHPROTECTCODESNOTPRESENT ‰BSR‡X03000 *œSETFLAG-PROTECTCODECHANGE*œSAVEPROTECTCODECHANGE ‰BRA.S…OUTD1OUTD:/‰MOVE.B#1,FLAGP-PBA(A2)‚SETCHGPROTONLYFLAG ‰BSR‡X03000 *œSETFLAG-PROTECTCODECHANGE*œSAVEPROTECTCODECHANGEOUTD1:‰TST.BFAMIFLAG-PBA(A2) ‰BNE.S…OUTFAM*œJMPIFFAMILYMODEOUTG: ‰TST.L…D6‰BEQ.SOUTEXIT#*œJMPIFPOTENTIALNAMECHANGEONLY9‰MOVE.WINCODEP-PBA(A2),FHSWCD(A6)‚RESETWITHINPUTCODES* OUTEXIT‚RTS‰PAGE'****************************************ˆTESTFORFAMILYCONDITIONS'***************************************3*ANYFIELDWITHAN*INTHEOUTPUTFIELDMUSTHAVE*AN*INTHEINPUTFIELD,*’AN*INTHEFILEOREXTENSIONFIELDOFTHE)*’OUTPUTREQUIRESAN*INTHEINPUTFIELD OUTFAMƒEQU*F‰MOVE.WOUTFHS-PBA+FHSWCD(A2),PROTOUT-PBA(A2)SAVEOPTPROTECTIONCODE.‰MOVE.BFAMIFLAG-PBA(A2),D1‚SAVEINPUTSETTING‰BTST#6,D1Š*INVOLFIELD‰BNE.SFAMER‹ERRORE‰MOVE.LINVOL-PBA(A2),DIRVOL-PBA+FHSVOL(A2)VOLNAMFORVOLASSIGNMENT‰FHSCALLDIRVOL(PC)‚ASSGNVOL‰BEQ.SOUTF0‰GOOD‰CLR.BFAMIFLAG-PBA(A2)‰BRAIOERPRTRˆERROR@OUTF0„MOVE.LINFHS-PBA+FHSVOL(A2),DIRFHS-PBA+FHSVOL(A2)‚SAVEVOL‰BTST#5,D1Š*INUSER# ‰BNE.SOUTF1‰YESFAMWASDEFAULTB‰MOVE.WINFHS-PBA+FHSUSN(A2),DIRFHS-PBA+FHSUSN(A2)INPUTTOUSER# ‰BRA.SOUTF1AAOUTF1„CMP.B#-2,OUTFHS+FHSUSN-PBA(A2)ƒCHECKOUTPUTUSERNUMFOR*‰BEQ.SOUTF1ABRIF*INFIELD+‰BRA.SFAMERCONFLICTINGUSERNUMBERFIELDSCOUTF1AƒMOVE.WDIRFHS-PBA+FHSUSN(A2),HOLDFUSN-PBA(A2)‚DEFAULTUSER#,‰LEAINFHS+FHSCLG(PC),A5ƒPOINTATINCATALOG‰LEAOUTFHS+FHSCLG(PC),A6‰LEAHOLDFAM(PC),A0‰LEADIRCAT(PC),A1‰MOVE.B#18,D0‡COUNT&‰TST.BFLAGP-PBA(A2)…PROTECTCODEONLY‰BNE.SOUTPONLYˆYES OUTFLOP‚CMP.B#'*',(A5)…SOURCE*‰BNE.SOUTF3‹NO *’SOURCEIS*‰CMP.B#'*',(A6)…DESTINATION*‰BNE.SFAMER‰NOISERROR1OUTF2„MOVE.B(A6)+,(A0)+‚SAVEDESTINATIONASMASK,‰MOVE.B(A5)+,(A1)+‚SAVESOURCEINDIRTABLE‰SUB.B#1,D0‰DONE‰BNEOUTFLOP‰NO‰BRA.SOUTFEXŠEXIT*’SOURCEWASNOT*#OUTF3„CMP.B#'*',(A6)…DESTINATION*‰BEQ.SFAMER‹YESISERROR‰BRAOUTF2‹GOODSAVEFAMER„CLR.BFAMIFLAG-PBA(A2)!‰BRAINVALERRˆGOTOERRORROUTINE/OUTPONLYMOVE.B(A5)+,(A1)+‚SOURCETODIRTABLE ‰SUB.B#1,D0 ‰BNEOUTPONLY OUTFEXƒEQU*‰RTS‰PAGE2***************************************************-*ˆROUTINETOPERFORMRENAMEOFREQUESTEDFILE*2***************************************************RENAMEITƒEQU**‰LEAINFHS(PC),A6ƒINIT*‰TST.BFLAGP-PBA(A2)…PROTECTONLYFLAGSET‰BNE.SRENAMP„YES.‰MOVE.W#FHRENM,FHSCMD(A6)‚RENAMECOMMANDCODE‰FHSCALLINFHS(PC)&‰BEQ.SRENAMPˆJMPIFRENAMESUCCESSFUL‰TST.BFAMIFLAG-PBA(A2)FAMILY$‰BEQIOERPRTRˆJMPIFNOTFAMILYMODE=‰MOVE.BD0,ERFLAG-PBA(A2)SETBADRETURNFORFAMILYPROCESSOR‰RTS**ˆCHECKFORNEWPR4 OTECTIONCODE* RENAMPƒEQU*&‰TST.BFLAGOC-PBA(A2)‚PROTECTCODESET‰BEQ.SRENEXIT*$************************************ *ˆNEWPROTECTCODESAREREQUIRED$**************************************‰MOVE.W#FHPROT,FHSCMD(A6)‚PROTECTCOMMAND9‰MOVE.WOUTCODEP-PBA(A2),FHSWCD(A6)‚MOVENEWCODETOPARM*‰FHSCALLINFHS(PC)‰BEQ.SRENEXIT†GOOD‰TST.BFAMIFLAG-PBA(A2)‚FAMILY‰BEQ.SRENER‰NO"‰MOVE.BD0,ERFLAG-PBA(A2)SAVEIND ‰RTS‡.‰RETURNRENER:"‰CMP.B#7,D0…PROTECTIONCODEERROR‰BEQPROTPRT…YES ‰BRAIOERPRTR** RENEXIT‚EQU*‰RTS**‰PAGE0*************************************************ˆFAMILYPROCESSINGFORRENAME0*************************************************FAMILYES EQU *$************************************ *ˆSELECTMSG$************************************‰LEACOPAM(PC),A3‰LEACOPAME(PC),A4 ‰BSRPRTLU6I‰IOSCALLOUTINIOS(PC)‰BNEIOERPRTBRIFI/OERROR$‰BSRSBARGƒFORCEUPPERCASERESPONSE ‰BNE‡FAM_TERM‰CMP.B#'S',MSGANS-PBA(A2)‰BNE.SFAMILY’GETNEXT5‰MOVE.BMSGANS-PBA(A2),SEL-PBA(A2)‰SAVESELECTOPTION FAMILYƒEQU*)******************************************ˆGETFILEFROMDIRECTORY)*****************************************"‰FHSCALLDIRFHS(PC)‚DIRECTORYCALL‰BEQ.SPROCDIR‰CMP.B#FSTAEOD,D0ƒENDOFFILE‰BEQ‚FAMILYEX‡YES*’PRINTERRORMSG,‰MOVE.LDIRFHS-PBA+FHSVOL(A2),VOLPRT-PBA(A2)‰LEADIRBLK+FDUSN(PC),A4 ‰BSRMOVMSG1 ‰BSRFAMPRT ‰BSRIOERPRTR ‰BRAFAMILYPROCDIR‚LEAINFHS+FHSUSN(PC),A1‰LEADIRBLK+FDUSN(PC),A0 ‰BSRMOVFILE14‰MOVE.WPROTIN-PBA(A2),INFHS-PBA+FHSWCD(A2)„PASSWORD‰MOVE.W#FHASGN,INFHS-PBA(A2)"‰TST.BFLAGP-PBA(A2)PASSWORDONLY‰BNE.SNOOUT‹YES *’DOOUTPUT)‰CMP.W#-2,HOLDFUSN-PBA(A2)‚FAMILYUSER#‰BNE.SFAM2ŠNO2‰MOVE.WINFHS-PBA+FHSUSN(A2),OUTFHS-PBA+FHSUSN(A2)FAM2…LEAHOLDFAM(PC),A0‰LEAINFHS+FHSCLG(PC),A1‰LEAOUTFHS+FHSCLG(PC),A2‰MOVE.B#18,D0‡INITCOUNTER(FAMLOPƒCMP.B#'*',(A0)…CKFORFAMILYIND‰BNE.SFAM3A‰NO"‰MOVE.B(A1)+,(A2)+‚GETFROMINPUT‰ADD.L#1,A0‰REPOSITIONMASKFAM3…SUB.B#1,D0‰CKFOREND‰BNEFAMLOPŠNO‰BRA.SFAMNXTŠDONE&FAM3A„MOVE.B(A0)+,(A2)+‚GETFROMMASK‰ADD.L#1,A1‰REPOSITIONINPUT ‰BRAFAM3NOOUT„LEAINVOL(PC),A0‰LEAOUTVOL(PC),A1 ‰BSRMOVFILEFAMNXTƒLEAOUTVOL(PC),A4%‰LEAPBA(PC),A2ŠRESTOREPGMBASEADDR!‰TST.BSEL-PBA(A2)‡MAKESELECTION‰BEQ.SFAM3B‰NO ‰BSRMOVMSGŠSETUPFILENAMEMSG‰LEACOPOK(PC),A3 ‰BSRPRTLU6I‰IOSCALLOUTINIOS(PC)‰BNEIOERPRTBRIFERROR$‰BSRSBARG‚FORCEUPPERCASERESPONSE ‰BNE‡FAM_TERM‰CMP.B#'Q',MSGANS-PBA(A2)‰BEQƒSTOPNOW‡STOPPROG‰CMP.B#'Y',MSGANS-PBA(A2)‰BEQ.SFAM3B‰CONTINUE‰BRAFAMILYŠGETNEXTFAM3B„LEAOUTVOL(PC),A4 ‰BSRMOVMSGŠSETUPFILENAMEMSG ‰LEACOPOKB(PC),A3‡PRTFILENAME ‰BSRPRTLU3I7********************************************************’ASSIGNINPUT7*******************************************************‰LEA‡INFHS(PC),A6!*œA6=INPUTPARAMTERBLOCKADDRESS‰CLR.BERFLAG-PBA(A2) ‰BSRINITIN1‰TST.BERFLAG-PBA(A2) ‰BEQ.SFAM3D*’***‚ERRROR***FAMERCK‚CMP.B#7,D0‰PROTERROR‰BNE.SFAMER1ˆNO‰BSRPROTPRT‰PRTMSG ‰BRA.SFAMRET"FAMER1ƒCMP.B#6,D0‰FILEDESCERROR ‰BNE.SFAMER2 ‰BSRINVALERR ‰BRA.SFAMRETFAMER2ƒBSRIOERPRTRˆIOERRORFAMRETƒBSR.SCLOSNEC‰CLOSEFILE ‰BRAFAMILY*Ž**‚PROCESS‚**FAM3D„LEAINFHS(PC),A5*7‰MOVE.WPROTOUT-PBA(A2),FHSWCD(A5)…PASSWORDFROMOUTPUT‰CLR.BERFLAG-PBA(A2) ‰TST.BFLAGP-PBA(A2)…NONEWNAME‰BNE.SFAM3E‰YES‰LEAINVOL(PC),A1‰LEAOUTVOL(PC),A0 ‰MOVE.B#6,D0,FAMMOVƒMOVE.L(A0)+,(A1)+‚MOVENAMETOINFHS‰SUB.B#1,D0‰DONE‰BNEFAMMOVŠNOFAM3E„BSRRENAMEIT‰TST.BERFLAG-PBA(A2)‰BNEFAMERCK‰CKFORERROR‰BSRGOODR‹PRINTGOODMSG‰BRAFAMRETŠGETNEXTRECORD!FAMILYEXBRASTOPNOW‰EXITROUTINE* FAM_TERM:‰CLR.B…FAMIFLAG-PBA(A2)(*œFORCETERMINATIONBYCLEARINGFAMIFLAG ‰BRA‡IOERPRTR* MOVFILE‚EQU*MOVFILE1 MOVE.L (A0)+,(A1)+‰MOVE.W(A0)+,(A1)+‰MOVE.L(A0)+,(A1)+…CAT‰MOVE.L(A0)+,(A1)+‰MOVE.L(A0)+,(A1)+…FILE‰MOVE.L(A0)+,(A1)+‰MOVE.W(A0),(5 A1)‡EXT‰RTS*$CLOSNEC‚MOVE.W#FHCLOS,INFHS-PBA(A2)‰FHSCALLINFHS(PC)‰CLR.BERFLAG-PBA(A2)„RESET‰RTS*‰PAGE*4******************************************************ˆROUTINETOSPACECOMPRESS&*ŠA0CONTAINSTHESENDINGLINEADDRESS(*ŠA4CONTAINSTHERECEIVINGLINEADDRESS,*ŠD1CONTAINSTHELENGTHOFTHESENDINGLINE*5******************************************************"SPCOMP…CMP.B#'',(A0)‚ISITBLANK‚BEQ.SBLD3ˆYES&‚MOVE.B(A0)+,(A4)+‚MOVETOPRINTLINE"BLDECK„SUB.W#1,D1…ISTHISTHEEND‚BHISPCOMPˆNO"‚MOVE.B#'',(A4)‚PUTBLANKATEND ƒRTSRETURN*!BLD3…ADD.W#1,A0‡INCADDROFSEND ‚BRABLDECK**‰PAGE*ˆMOVEFILENAMETOWORKAREA"MOVMSGƒMOVE.L(A4)+,VOLPRT-PBA(A2)MOVMSG1‚LEAL1USN(PC),A0 ‰CLR.LD0‰MOVE.W(A4)+,D0‰MOVE.L#4,D1ˆSIZE"‰BSRBINDECFJˆCONVTOASCIIUSER##‰MOVE.L(A4)+,L1CAT-PBA(A2)‚CATALOG‰MOVE.L(A4)+,L1CAT+4-PBA(A2) ‰MOVE.L(A4)+,L1FIL-PBA(A2)‚FILE‰MOVE.L(A4)+,L1FIL+4-PBA(A2)‰MOVE.W(A4),L1EXT-PBA(A2)ƒEXT*’FORSPACECOMPRESSION‰LEADIRMSG(PC),A0‰LEACOPOKB(PC),A4‰MOVE#34,D1‰SIZE ‰BSRSPCOMP‰RTS*‰PAGE%**************************************;*ˆROUTINETODIRECTOUTPUTTOSOMETHINGOTHERTHANTERMINAL*&**************************************9********************************************************** NEWOUTƒEQU**%‰FHSCALLLU3FHS(PC)‚CLOSEPREVASSIGN ‰BNEIOERPRT,‰LEALU3FHS(PC),A6ƒLU3PARMTABLEADDRTOA6@‰MOVE.B#0,FHSWCD(A6)LOADWRITEPASSWORD(USERCANALWAYSWRITE?‰MOVE.B#$FF,FHSRCD(A6)‚LOADREADPASSWORD(ONLYUSERCANREAD)3‰MOVE.WUSERNUM-PBA(A2),FHSUSN(A6)‚DEFAULTUSERNUM-‰MOVE.LVOLNAM-PBA(A2),FHSVOL(A6)‚VOLUMENAME*‰MOVE.LCATNAM-PBA(A2),FHSCLG(A6)‚CATNAME)‰MOVE.LCATNAM+4-PBA(A2),FHSCLG+4(A6)‚CAT*‰MOVE.W#'LS',FHSEXT(A6)‡DEFAULTEXTISSA5‰MOVE.LOFLAG-PBA(A2),A0‡OFLAGHADADDROFSCANSTART*)******************************************&*ˆSETUPA0WITHADDROFSTARTOFSCAN'*ˆSETUPA6WITHADDROFFHSPARMBLOCK*‰CALLEDITFILEROUTINE****)****************************************** ‰BSREDITFILE‰TST.LD0ŠCKFORERR0R ‰BMI.SINVAL6‰BTST#1,D0†CKFORDEVICEFLAG‰BNE.SLU3ASS†YES‰TST.BD0ˆCKFORFAMILY%‰BNE.SINVAL6ˆFOUNDFAMILYINDICATION ‰BRA.SNOTDEV)******************************************'*ˆ****ƒASSSIGNLOGICALUNIT3(LISTING)*'****************************************LU3ASS: ‰BTSTW…#14,D0 ‰BNE‡X02000*œJMPIF*¦DEVICESPECIFIED*¦VOLUMEFIELDISNULL%*œTHEUSERHASSPECIFIEDTHETERMINAL$*œWHICHISTHEDEFAULTDEVICEANYWAY*œASTHEOUTPUTDEVICE-‰MOVE.W#FHASGN,FHSCMD(A6)‚SETASSIGNCOMMAND4‰MOVE.W#FOPPW,FHSOPT(A6)‚SETEXCLUSIVEWRITEOPTION ‰FHSCALL(A6)!*ˆ*****ƒRETURNFROMFHSCALL‚****‰BNE.SIOERPRTˆERR0R!NEWOUTE‚RTSŒ.RETURNFROMROUTINE***)******************************************"*ˆ**‚OUTPUTISAFILENOTADEVICE.*ˆ**‚A6CONTAINSADDROFOUTPUTFHSPARMBLOCK*)****************************************** NOTDEVƒEQU**3‰MOVE.W#FHALLO+FHASGN,FHSCMD(A6)‚SETALLOC&ASSIGN*4*ˆ***PUBLICWRITEOVERWRITE&VARABLELENGTHRECORD*Š***‚OPTIONSSET*'‰MOVE.W#FOPPW+FOPEND+FOPSEQ,FHSOPT(A6)+‰CLR.WFHSLRL(A6)‚SETLOGICRECLENGTHTO0"‰CLR.LFHSSIZ(A6)‚SIZECODE=ZERO*‰FHSCALL(A6)‡MAKEFHSCALL‰BEQNEWOUTEˆGOOD‰CMP.B#5,D0‰DUPFILE‰BNE.SIOERPRT‰ERROR#‰MOVE.W#FHASGN,(A6)SETTPOASSGN‰FHSCALL(A6)ˆTRYAGAIN‰BNE.SIOERPRT‰BRANEWOUTE‰CONTINUE*‰PAGE*FAMPRTƒLEACOPOKB(PC),A3‰BSR.SPRTLU3I‰RTS**’INVALIDMSGTOTERMINALINVAL6ƒMOVE.L#EM_NVE,D0 ‰BSRPRTERM ‰BRASTOPNOW*-********************************************* IOERPRT‚EQU*.‰MOVE.L#LDFLUN,D1ƒSETUPFORMSGHANDLERCALL ‰BSRPRTERM‰TST.BFAMIFLAG-PBA(A2)†FAMILY‰BEQSTOPNOW‰NO‰RTS*)IOERPRTRMOVE.L#3,D1ˆMOVEERRORTOLUN3 ‰BSRPRTERM‰TST.BFAMIFLAG-PBA(A2) ‰BEQSTOPNOW ‰RTS‡.‰RETURN*)PRTLU6I‚MOVE.LA3,OUT6IIOS-PBA+IOSSAD(A2)"‰MOVE.LA4,OUT6IIOS-PBA+5 IOSEAD(A2)‰IOSCALLOUT6IIOS(PC) ‰BNE‡STOPNOW‰RTS* PROTPRT‚EQU*‰MOVE.L#3,D1’SETD1TOLUN3PRTCOM ‰BSR.SPRTERM‰TST.BFAMIFLAG-PBA(A2) ‰BEQSTOPNOW‰RTS*'PRTLU3ƒMOVE.LA3,OUT3IOS-PBA+IOSSAD(A2)!‰MOVE.LA4,OUT3IOS-PBA+IOSEAD(A2)‰IOSCALLƒOUT3IOS(PC) ‰BNE‡IOERPRT‰RTS*)PRTLU3I‚MOVE.LA3,OUT3IIOS-PBA+IOSSAD(A2)"‰MOVE.LA4,OUT3IIOS-PBA+IOSEAD(A2)‰IOSCALLƒOUT3IIOS(PC) ‰BNE‡IOERPRT‰RTS* GOODR„EQU*‰LEA‚GOODM(PC),A3‰LEA‚GOODME(PC),A4 ‰BSRPRTLU3‰RTS**ˆPROTECTERRORMESSAGE* PERRƒEQU*‰LEAPMSG(PC),A3‰LEAPMSGE(PC),A4 ‰BRA.SERCALL*ERR1…CLR.BFAMIFLAG-PBA(A2)INVALERR EQU *‰MOVE.L#EM_NVE,D0ERR2:‰MOVE.L#LDFLUN,D1‰BRAPRTCOM‘GOTOPRINTCOMMON**&*ˆ**‚ROUTINETOPRINTERR0RMESSAGE‚***,*********************************************ERCALLƒBSRPRTLU3‰TST.BFAMIFLAG-PBA(A2)†FAMILY‰BEQƒSTOPNOW‡NO ‰RTS‡.‰RETURN‰PAGE‰PAGE***’ERRORMESSAGECALLINGROUTINE**ˆCALL†BSR‡PRTERM**ˆINPUT!*’D0=ASRETURNEDFROMTRAPCALL,*’D1=USERLOGICALUNITNUMBERTOOUTPUTTO!*’A0=ASRETURNEDFROMTRAPCALL**ˆOUTPUT*’NOREGISTERPRESERVATION* EM_XCEPT:‰DC.W†$0000…TABLETERMINATOR*PRTERM:‰MOVEM.LƒD0/A0,EM_PBLK-PBA(A2)+*œSAVED0ANDA0INERRORMSGPARAMETERBLK‰AND.L…#$00FF,D0*œISOLATEERRORSTATUSRETURN‰LEA‡EM_XCEPT(PC),A00*œA0=ADDROFTBLCONTAININGERRORMSGCODESTHAT-*ŸWILLNOTBECONSIDEREDASERRORTERMINATION *ŸCONDITIONS CEMP0100: ‰TST.W…(A0)‰BEQ.S…CEMP0200 *œJMPIFTABLEHASBEENEXAMINED‰CMP.W…(A0)+,D0‰BEQ.S…CEMP0300'*œJMPIFERRORCODERETURNISONEWHICH/*œWILLRESULTINBEINGANEXCEPTION-THISCASE**œWILLNOTBECONSIDEREDFORANERRORTYPE *œTERMINATION‰BRA.S…CEMP0100 *œREPEATLOOP CEMP0200:‰LEA‡TERM_FLG(PC),A0‰BSET†#BN00,(A0),*œSETFLAGTOTERMINATEWITHERRORCONDITION CEMP0300:‰LEA‡EM_PBLK(PC),A0&*œA0=ADDRUSERERRORMSGPARAMETERBLK‰MOVE.B„D1,EM_TLUN-EM_PBLK(A0)*œSETTHEUSERLUNTOOUTPUTTO ‰MOVE.L„#2,D0*œERRORMSGPRGMINPUTRQMNT‰TRAP†#4$*œISSUEREQUESTTOERRORMSGHANDLER‰MOVE.L„R_D67A01+4-PBA(A2),D0**œD0=CONTENTSOFREGD7UPONPROGRAMENTRY ‰BTST.L„#0,D0 ‰BEQ‡STOPNOW*œJMPIFCHAINFILEPROCESSING‰RTS **‰PAGE -*********************************************+*‚32BITBINARYTODECIMALASCIISUBROUTINE-**********************************************,*‚CONVERTSBINARYIND0ANDPUTSASCIIDIGIT(*…CHARACTERSATADDRESSSPECIFIEDINA0.(*…LEADINGZEROSARECONVERTEDTOSPACES.+*…THEFIELDLENGTH(NO.CHARS)ISSPECIFIED *…IND1INTHECALLINGSEQUENCE.**‚CALLINGSEQUENCE:!*…MOVE.L,D0*…MOVE.L,D11*…MOVE.L,A0*…BSRBINDECFJ* *‚RETURNS:*…D0=0=>GOODCONVERSION**‚REGSUSED:‚01234567 *ŠDƒ****ŠAƒ***7TENS…DC.L10000000,1000000,100000,10000,1000,100,10,1,0*$BINDECFJ MOVE.L #8,D2 MAX NO. DIGITS SUB.L D1,D2 NO. DIGITS TO SKIP! BMI.S BINDECF5 BRANCH ERROR EXIT LSL.L #2,D2 DOUBLE WORD LENGTH LEA TENS(PC),A1 START OF TABLE" ADD.L D2,A1 ADJUST FOR DIFFERENCE&MOVE.W#'‚',D2INITIALIZEACCUMULATOR%BINDECF1 SUB.L (A1),D0 SUBTRACT 10**N BCS.S BINDECF2 BRANCH TOO BIG* ADD.W #1,D2 INCREMENT CURRENT DIGIT COUNT BRA BINDECF1 CONTINUE)BINDECF2 ADD.L (A1)+,D0 RESTORE, ADV PNTR TST.L (A1) TEST DONE BEQ.S BINDECF4 BRANCH DONE CMP.W#'‚',D2LEADINGZEROTEST! BEQ.S BINDECF3 BRANCH STILL ZERO# ADD.B #$10,D2 BRING TO ASCII DIGIT%BINDECF3 MOVE.B D2,(A0)+ DEPOSIT CHAR LSL #8,D2 SAVE CHAR DEPOSITED# MOVE.B #$20,D2 RESTORE LS TO SPACE BRA BINDECF1 CONTINUE4BINDECF4 ADD.B #$10,D2 LAST ONE BECOMES DIGIT ALWAYS" MOVE.B D2,(A0)+ DEPOSIT LAST CHAR' TST.L D0 SET CONDITION CODE, 0 IF GOOD BINDECF5 RTS*‰PAGE*#*ˆOPTIONSSPECIFIEDONCOMMANDLINE*X01000:"‰MOVE.L„PBA-PBA(A2),X00110-PBA(A2)&‰MOVE.L„PBA+4-PBA(A2),X00110+4-PBA(A2)*œSETREVISIONCODEINMSG‰LEA‡X00100(PC),A3‰LEA‡X00199(PC),A46 *œA3=STARTMSGADDR*œA4=ENDƒMSGADDR ‰BSR‡PRTLU3*œPRINTREVISIONCODEMESSAGE‰MOVE.L„#EM_NVO,D0)*œD0=KEYVALUEFORINVALIDOPTIONMESSAGEX01100:‰CLR.B…FAMIFLAG-PBA(A2)*œSETFLAG-TERMINATE ‰BRA‡ERR2*-*ˆRE-ASSIGNTHETERMINALASTHEOUTPUTDEVICE*X02000:‰FHSCALLƒLU3AFHS(PC) ‰BNE‡IOERPRT‰RTS*** *ˆRTNETO"*’SAVETHEOUTPUTPROTECTIONCODES*’SETFLAGINDICATINGABOVE**X03000:‰MOVE.B„#1,FLAGOC-PBA(A2) *œSETFLAG#‰MOVE.W„FHSWCD(A6),OUTCODEP-PBA(A2)*œSAVEOUTPUTPROTECTIONCODESTˆRTS‰PAGEPROGSIZEEQU‡*-PBA ‰ENDSTARPROGéé=/* =/*†REPAIR.AF=/*)=/* Chain file to assemble REPAIR utility=/*:=/* If no output argument is specified for the listing the(=/* chain file will default to REPAIR.LS=/*=/IFC \1ƒ=ARGREPAIR.LS=/ENDIF=/**=ASM REPAIR1.SA,REPAIR1.RO,TEMP1.LS;RZ=220=/*{ Included files are:=/*ƒ9995.&.EXE.EQ=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.&.NIO.EQ=/*ƒ9995.&.FME.EQ=/*ƒ9995.&.FMI.EQ=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;Y=/*%=ASM REPAIR2.SA,REPAIR2.RO,TEMP1.LS;R=/*{ Included files are:=/*ƒ--none--=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;Aƒ=COPYTEMP2.LS,\1;Yƒ=DELTEMP1.LSƒ=DELTEMP2.LS=/*=ENDééééé½#=/* =/*†REPAIR.LF=/*'=/* Link chain file to create REPAIR.LO=/*:=/* If no output argument is specified for the listing the(=/* chain file will default to REPAIR.LL=/*=/IFC \1ƒ=ARGREPAIR.LL=/ENDIF=/*=LINK ,REPAIR.LO,\1;HAMIX ATTRIBUTES PSEG SEG0:0,14 $0000INPUT REPAIR1.ROINPUT REPAIR2.ROLIB 0.&.UTILIB.ROEND=/*=END6 ééééééÆŠPAGEOREPAIR IDNT 04,02 REPAIR Utility 01/31/85 Rel. 4.00 Copyright 1983 Motorola Inc‰PAGE**%*ˆBKMLOGICCHANGESTOREPAIRUTILITY***‰1.'C'OPTIONISTRULYACHECKONLYMODE!*NOUPDATINGWHAT-SO-EVEROCCURS*;*‰2.FORVARIABLELENGTHRECORDS(VRL)ANEDITISPERFORMED8*ŒTOENSURETHATTHEBALANCEOFTHEDATABLOCKISZERO'S)*ŒAFTERTHELASTRECORDINTHEDATABLOCK*>*‰3.FIXEDALOGICBUGINTHE'UPDATE'ROUTINETOEDITFORTHE*Œ'CR'RESPONSEONLY*C*‰4.STEVEBALLHADALREADYMADECHANGESFORPROBLEMOFACRCERROR?*ŒWHILEPROCESSINGSATTODISPLAYONLYTHOSESECTORSINTHESAT?*ŒTHATHADACRCERROR---THECODEHADNOTBEENCHECKEDOUT--<*ŒICHECKEDITOUTANDMADEMINORCHANGESFORTHOSEPROBLEMS *ŒENCOUNTERED*C*‰5.STEVEBALLHADALREADYMADECHANGESFORPROBLEMOFPRINTERNOTD*ŒREADY--A1.5SECONDDELAYANDREPEATOFATTEMPTTOPRINTMESSAGE>*ŒWASPUTIN--ANYERROROTHERTHANNOTREADYWOULDTERMINATEA*ŒPROCESSING--THECODEHADNOTBEENCHECKEDOUT--ICHECKEDIT;*ŒOUTANDMADEMINORCHANGESFORTHOSEPROBLEMSENCOUNTERED*F*‰6.MESSAGE-PRINTERERRORD0=XXXXXXXXU-WASBEINGOUTPUTBECAUSED*ŒTHEWRONGENDINGADDRESSWASBEINGSPECIFIED-THEEXTRACHARACTER3*Œ'U'WASBEINGDISPLAYED---PROBLEMWASCORRECTED*$*ƒChangesmadebyMarcBriel‚1/17/83*E*‰1.ModifiedtheSATcheckroutinetoexecuteproperlyifthenumber?*‹ofsectorsonthediskbeingrepairedexactlyfilledtheSAT.A*‹Previously,REPAIRwouldattempttoallocatesectorsfarbeyond@*‹theendoftheSATbuffercausingabuserrororsystemcrash.*F*‰2.Addedacheckforthediskconfigurationarea.IfaconfigurationD*‹areaexists,itslengthmustbenon-zerooranerrorisissuedandD*‹theutilityterminates.Ifthelengthisnon-zero,thediskSATisB*‹checkedtoassurethatthesectorsareallocatedandthesectorsB*‹areallocatedinthereconstructedSAT.Anyallocationconflicts"*‹thatarisearehandledasusual.*ÈÏ/ØJàPèIð*øGH2op n(m0u8w@KHHPAXE`PhOpDx;€HˆAa˜@ @¨F°T¸E7 (*ƒChangesmadebyRonJones,Jr.7/26/83*G*‰1.Addedalineofcodetothe"CHECKATTRIBUTES"routinethatmaskesC*Œoffallbutthebitsthatrepresentthefiletype.ThisfixedtheB*Œproblemofanerror"ER:FILEATTRIBUTES"bienggeneratedifanyA*Œofthebitsintheuserspecifiedattributefieldareset.This=*Œiseventhoughallotherfileattributesarecorrectlyset.‰PAGE*!* EQUATES (INCLUDED UNDER NOLIST)ŠNOLISTŠINCLUDE9995.&.EXE.EQŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.&.IOE.EQŠINCLUDE9995.&.NIO.EQŠINCLUDE9995.&.FME.EQŠINCLUDE9995.&.FMI.EQŠLIST*‰INCLUDE9995.&.EXE.EQ*‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.IOE.EQ*‰INCLUDE9995.&.NIO.EQ*‰INCLUDE9995.&.FME.EQ*‰INCLUDE9995.&.FMI.EQ*O*******************************************************************************O**********************************************************************************$*ˆREPAIR„UTILITY‚-PART1***O*******************************************************************************O*********************************************************************************ˆ*************ˆDATASECTION*ˆ*************B*ˆNOTE:ALLSECTORNUMBERSMUSTBELESSTHANOREQUALTO$7FFFFFFF*ˆ(HIGHORDERBITOFF).2*ˆALSO,2COMPLETESATBUFFERSAREMEMORYRESIDENT***ˆLINKAGETOPART2*ŠXDEFƒBŠXDEFƒSATABUF,SATDBUF,SATFLG(ŠXREFƒBDCONV,EDITFILE,OPTION,PARSE,SBARG/ŠXREFƒALDESC,TSTNYA,TSTFRE,TSTALC,DEALLC,ALLOCT9ŠXREFƒDECBINW,CHKKEY,IM,HEXBIN,CLRBUF,BLNKFL,ALPHA,ALFNUM ŠXREFƒBIN4HEX ŠXREFƒBIN2HEX ŠXREFƒBIN1HEX ŠXREFƒBIN2DECŠOPT„A *ˆEQUATES*3PDBSZE„EQU„DBSZEŽCHANGENAMESFORUNIFORMITY'SSAKEPDBFPT„EQU„DIRFPTPDBENT„EQU„DIRENTPDBSTR„EQU„DIRSTRPDBLEN„EQU„DIRLEN*7*ˆTHEFOLLOWINGLUN'SMUSTBEAVAILABLEFORASSIGNMENT:D*ˆ(CDF/LDFLUNMUSTBEASSIGNEDANDTRANSFERREDTOREPAIRBYLOADER)**VOLLUN„EQU„1’LUNFORVOLUMETOBEREPAIREDPRTLUN„EQU„2’LUNFORPRINTER**ˆTASKANDSEGMENTEQUATES*&TASKID„EQU„'REPA'TASKNAMEFORREPAIR.SATSEG„EQU„'SATS'SEGMENTNAMEFORSATSEGMENTB*ˆ(SEGMENTALLOCATEDAFTERVIDCHECKSTEP-REMAINSALLOCATEDTILL*ˆREPAIRTERMINATES.)-FDBSEG„EQU„'FDBS'FAB/DATABLOCKSEGMENTNAMED*ˆ(SEGMENTALLOCATEDFOREACHNONCONTIGUOUSFILECHECK-DEALLOCATED*ˆATENDOFTHEFILECHECK.)**CRˆEQU„$D‘CARRIAGERETURNLFˆEQU„$A‘LINEFEED2NOPTIONƒEQU„0’D6EQUATEFORSCANNINGOPTIONSFIELD1MAXBAD„EQU„12‘NUMBEROFTRACKSFORALTSECTORS‚()ŠPAGE*1*ˆD7BITEQUATES-SEEVIDCHECKFORMOREDETAILS*"DEFOPT„EQU„1’DEFAULTOPTIONSTATUSKOPTIONƒEQU„131RCRSAT„EQU„14‘1=>RECREATESAT,0=>USEOLDSAT9COPTIONƒEQU„15‘IMOFFFORCHECK-ONLYMODE(TERMONERROR)&IMC‡EQU„16‘IMOFFMODETILLERROR/DONE3NXTSTP„EQU„17‘IMOFFTILLNEXTMAJORSTEPOFREPAIR.STP1†EQU„18‘IMTURNEDOFFTILLNEXTMINORSTEP/FOUNDF„EQU„29‘SET=>FILEFOUNDFORFILEREPAIR*’OFF=>FILENOTFOUNDYETROPTIONƒEQU„301FREPAIRƒEQU„31‘FILENAMEGIVEN‚FORREPAIR/RECOVERY5NIMASK„EQU„$0FFF0000ŠMASKTOTURNIMBACKONIFERROR**O******************************************************************************** ŠSECTION0B‰EQU„*’FORBASEREFERENCINGŠDC.Bƒ'0131854'*O********************************************************************************PATCH:„DS.Bƒ100PATCHAREA*ŠDS.Bƒ500STACKAREA*3STACK…EQU„*’STACKOVERFLOWWILLCAUSE‚ADDRESSERROR*$************************************ *ˆMACROS$************************************ L0LFƒMACROŠDC.Bƒ\1ŠDC.BƒCRŠDS…0ŠENDM L1LFƒMACROŠDC.Bƒ\1ŠDC.BƒCRŠDC.BƒLFŠDS…0ŠENDM L2LFƒMACROŠDC.Bƒ\1ŠDC.BƒCRŠDC.BƒLFŠDC.BƒLFŠDS…0ŠENDM *ˆ****************************ˆSTARTOFUNINITIALIZEDDATA*ˆ**************************** DATAUI„EQU„**-DRVHEADS‚DS.Bƒ1’NUMBEROFHEADSONTHISDRIVE4SECPTRAK‚DS.Bƒ1’NUMBEROFSECTORS/TRACKONTHISDISK7ALTLASTƒDS.Lƒ1’PSNOFFIRSTSECTOROFALTERNATESECTORS2LSTSRD„DS.Lƒ1’PSNOFLASTSECTORBEFOREREADERROR7 8TOTVSECT‚DS.Lƒ1’TOTALNUMBEROFVERSAdosSECTORSONDISKLINESTRT‚DS.Lƒ1AMTLEFTƒDS.Lƒ1 SDBDEL„DS.Lƒ1 PDBDEL„DS.Lƒ1**ˆSECTORBUFFERFORVID*VIDBUF„DS.Bƒ256*6*ˆSECTORBUFFERFORREADINGINSECTORSFORUPDATE/DUMP*SECBUF„DS.Bƒ2560PSNSEC„DS.Lƒ1’PSNOFSECTORINBUFFER(0=NONE)***‰POINTERSTOTHEBUFFERINUSE*/USESBUFƒDS.Lƒ1’ADDRESSOFSDBBUFFERBEINGUSED/USEPBUFƒDS.Lƒ1’ADDRESSOFPDBBUFFERBEINGUSED** *‰SDBBUFFER*-PSNSDB„DS.Lƒ1’PSNOFSDBINBUFFER(0=NONE)'PRVSDB„DS.Lƒ1’PRIORSDB'SPSN,0=NONE'NXTSDB„DS.Lƒ1’PSNOFNEXTSDB,0=NONE SPTR1…DS.Lƒ1SDBBUF„DS.BƒSDBSZE*256*6*‰ALTERNATESDBBUFFER†(USEDINEMPTYSTRUCTURECHECK)* SPTR2…DS.Lƒ1SDB2BUFƒDS.BƒSDBSZE*256** *ˆPDBBUFFER*.PSNPDB„DS.Lƒ1’PSNOFPDBINBUFFER‚(0IFNONE)-PRVPDB„DS.Lƒ1’PSNOFPREVIOUSPDBƒ(0IFNONE))NXTPDB„DS.Lƒ1’PSNOFNEXT…PDBƒ(0IFNONE) PPTR1…DS.Lƒ1PDBBUF„DS.BƒPDBSZE*256*6*‰ALTERNATEPDBBUFFER†(USEDINEMPTYSTRUCTURECHECK)* PPTR2…DS.Lƒ1PDB2BUFƒDS.BƒPDBSZE*256**:*ˆSATBUFFERADDRESSES‚-BUFFERSALLOCATEDAFTERVIDCHECK*@SATABUFƒDS.Lƒ1‹ADD.OFALLOCATIONSATBUFFER(CREATEDBYREPAIR)DSATDBUFƒDS.Lƒ1‡ADD.OFOLDSATBUFFER(FROMDISK,CHANGEDBYREPAIR)**ˆPRIORFAB'SLASTKEY*$PRIFKY„DS.Bƒ100100=MAXKEYLENGTHŠPAGE*D*ˆFABANDDATABLOCKBUFFERS-BUFFERALLOCATEDFOREACHFILEDURING+*ˆFILECHECK,RELEASEDATENDOFTHECHECK.*5PSNFAB„DS.Lƒ1’PSNOFCURRENTFABINMEMORY(0=NONE),PRVFAB„DS.Lƒ1’PSNOFPREVIOUSFAB(0=NONE)JFABLNK„DS.Lƒ1PSNOFLASTFABUSINGFORWARDLINKS,TOBELINKED(0=NONE):FDBSTR„DS.Lƒ1STARTINGLOGICALADDRESSOFFAB-DATA-SEGMENT9*’ADDRESSKNOWNAFTERITISALLOCATED.(PHYSICAL=LOCIGAL)5*’SEGMENTALLOCATEDFOREACHFILECHECKTOGETPROPER9*’SIZEBUFFERS;FABBUFFERISATBEGINNINGOFTHESEGMENT'*’ANDISFOLLOWEDBYDATABLOCKBUFFER.'FABBUF„EQU„FDBSTRADDRESSOFFABBUFFER3PSNDB…DS.Lƒ1’PSNOFDATABLOCKIN‚MEMORY(0=NONE)!DBBUF…DS.Lƒ1’ADDRESSOFDBBUFFER.DBEND…DS.Lƒ1’ADDRESSOFLASTBYTEOFDBBUF+1-DBLEA…DS.Lƒ1’LOGICALENDADDRESSOFDBBUFFER&FABLEN„DS.Lƒ1’NUMBEROFSECTORSINFAB2FABCHK„DS.Bƒ1’FABLINKFLAGFORCHECKINGFABCHAINFFBFLNK„EQU„0ƒDOFORWARDTHENBACKWARDSEARCH,NOWDOINGFORWARDSEARCH#FLOLNK„EQU„1’DOONLYFORWARDSEARCH6FBBLNK„EQU„2’DOINGBACKWARDSEARCHAFTERFORWARDLINKS$BLOLNK„EQU„3’DOBACKWARDSEARCHONLY)LSTLNK„EQU„$FFDONE,DOINGLASTFABCHECKDBFLG…DS.Bƒ1‰0=DB‚NOTUPDATED,1=DB‚UPDATED,WRITETODISK?SATFLG„DS.Bƒ1‰0=SATNOTTOBEUPDATED,1=UPDATESATONDISKBCFGAFLGƒDS.Bƒ1‰0=CFGANOTTOBEUPDATED,1=UPDATECFGAONDISK**5PRTFLG„DS.Bƒ1’0=>DUMPTOLDFLUN,1=DUMPTOPRTLUNGCPYFLG„DS.Bƒ1ƒ1=>TERMINALOUTPUTONLY,0=>HARDCOPYTOLINEPRINTER%LINECNTƒDS.Bƒ1’LINESPERPAGEPRINTED:MAXLINES‚DC.Bƒ1’MAX#OFLINESPERPAGEFORPRINTEROUTPUT!FILOK…DS.Bƒ1’1=FILEOK,0=NOTOK8 6RCVFLG„DS.Bƒ1’1=RECOVERINGDELETEDFILE,0=NORECOVERY,DELCRI„DS.Bƒ1’1=DELETECURRENTITEM,0=DON'T-DELPRI„DS.Bƒ1’1=DELETEDPRIORFAB,0=IFDIDN'T,DELNXF„DS.Bƒ1’1=DELETEDNEXTFAB,0=IFDIDN'T*KILL†DS.Bƒ1’KILLREPAIR*&TEMP†DS.Lƒ1’TEMPORARYREGISTERSTORAGE**'*‰FLAGSUSEDBY'EMPTYSTRUCTURECHECK'*/CRSDBFLG‚DS.Bƒ1’SDBCURRENTBUFFERUPDATEDFLAG3FIRSFLGƒDS.Bƒ1’1stCHARINLINETOBEPRINTEDFOUND-LSSDBFLG‚DS.Bƒ1’PREVIOUSSTRUCTURE=SDBFLAG-LSPDBFLG‚DS.Bƒ1’PREVIOUSSTRUCTURE=PDBFLAG/PUPFLG„DS.Bƒ1’PDBALTERNATEBUFFERUPDATEDFLAG/SUPFLG„DS.Bƒ1’SDBALTERNATEBUFFERUPDATEDFLAG2SATSGFLG‚DS.Bƒ1’1=SATSEGMENTALLOCATEDINMEMORY***‰FLAGSUSEDBYHELPFACILITY*)ASKCTFLG‚DS.Bƒ1’1=ASKTOCONTINUE‚0=NOT***ˆUPDATESECTORLIMITS*>UPDSTR„DS.Lƒ1ŒUPDATEPSNBOUNDS:FIRSTPSNTHATMAYBEUPDATED*œ(LOWERBOUND)/UPDEND„DS.Lƒ1’FIRSTPSNTHATMAYNOTBEUPDATED*œ(UPPERBOUND+1)ŠPAGE**ˆDISKATTRIBUTES*FMPSN†DS.Lƒ1‚LASTPSNAVAILABLEONTHEDISK(MPSN+1=TOTAL#OFSECTORS)ANOSEC…DS.Wƒ1ˆ#OFSECTORSNOTONDISKBUTMARKEDALLOCATEDINSAT**ˆLINEBUFFERFORDUMP*LINEBUFƒDS.Bƒ2’2SPACESOFSFLD„DS.Bƒ2’OFFSETFIELDŠDS.Bƒ2’2SPACES.ŠDS.Bƒ16*3+116BYTESINHEXFOLLOWEDBYSPACEŠDS.Bƒ3’3SPACES#ASCFLD„DS.Bƒ16‘ASCIIREPRESENTATIONLINEL…EQU„*-LINEBUF**ˆ**************************ˆENDOFUNINITIALIZEDDATA*ˆ**************************ŠDS.Lƒ0:DATAUILƒEQU„*-DATAUI‹BYTECOUNTTOCLEARININITIALIZATIONŠPAGE*(*ˆCOMMANDLINEANDINPUT/RESPONSEBUFFER*(INPBUF„COMLINE8180CHARACTERLINE+CRINPBUFEƒEQU„*-1ENDOFBUFFERŠDS.Lƒ0*)INITREGƒEQU„*’REGSSAVEDONINITIALENTRY-STSKNAMƒDS.Lƒ1’D0=TASKNAMETHATSTARTEDME1SESNUM„DS.Lƒ1’D1=SESSIONNUMBERTHATSTARTEDME&VOLNAM„DS.Lƒ1’D2=DEFAULTVOLUMENAME'USERNUMƒDS.Lƒ1’D3=DEFAULTUSERNUMBER(CATNAMEƒDS.Lƒ1’D4=DEFAULTCATALOGNAME-ŠDS.Lƒ1’D5=2NDHALFOFDEFAULTCATALOGNAME,ŠDS.Lƒ1’D6=#OFCHARACTERSINCOMMANDLINEéééééééé8 éééééééééééééééé9 éééééééééééééééé9 éééééééééééééééé: éééééééééééééééé: éééééééééééééééé; éééééééééééééééé; éééééééééééééééé< éééééééééééééééé< éééééééééééééééé= éééééééééééééééé= éééééééééééééééé> éééééééééééééééé> éééééééééééééééé? éééééééééééééééé? éééééééééééééééé@ éééééééééééééééé@ ééééééééééééééééA ééééééééééééééééA ééééééééééééééééB ééééééééééééééééB ééééééééééééééééC ééééééééééééééééC ééééééééééééééééD ééééééééééééééééD ééééééééééééééééE ééééééééééééééééE ééééééééééééééééF ééééééééééééééééF ééééééééééééééééG ééééééééééééééééG ééééééééééééééééH ééééééééééééééééH ééééééééééééééééI ééééééééééééééééI ééééééééééééééééJ ééééééééééééééééJ ééééééééééééééééK ééééééééééééééééK ééééééééééééééééL ééééééééééééééééL ééééééééééééééééM ééééééééééééééééM ééééééééééééééééN ééééééééééééééééN ééééééééééééééééO ééééééééééééééééO éééééééééééééééé