file system 12/2/70 pbs.=3 /physical block spacing (must be >2) ffb.=12 /first free tape block dirl.=4 /directory length dir1.=6 /address of directory 1 dir2.=773 /address of directory 2 cbl.=6000-cbf /character buffer length 0/ jmp in /load new file system, save directory 1/ jmp ini /initialize entire tape 2/ jmp file /normal entry point 3/ jmp nme /rename tape 4/ cbf /address of character buffer 5/ cbl /maximum length of buffer 6/ jmp invk /invoke file system 7/ text .12/2/70. /date of assembly 12/ /constants used in first page before file system read in const1, dirlxi dir1 const2, dirlxi i dir2 const3, 607600 const4, lai e21=e23+2 /text / 2_/ invk, clf 7 stf 1 jmp file 1 file, clf 7 iam law cbf dac tyin lio 0 /([ffb-dirl-1]xi 1 law 400 ivk 16 /read file system jmp trr /tape error while reading directory szf i 1 jdp bdmp jmp rdir swd, jdp wdy rdir, lio const1 /dirlxi dir1 law 6000 ivk 16 jmp trr rdir1, lio const2 /dirlxi i dir2 law ntb ivk 16 jmp trr law (dirlxi dir2 dap rdir1 /setup for directory swap dzm wpm /turn on software write permit law e21 / 2_ jdp chd /check directory 2 jmp bdir /bad directory jdp dswp /look at dir 1 law e20 / 1_ jdp chd /check dir 1 jmp bdir jdp dcom /compare 2 good directories jmp dok /both ok and the same idx wpm /turn off write permit law e22 /directories don't match jdp txp jmp dok bdir, jdp dswp law e23 / 1 and 2_ jdp chd idx wpm /turn off write permit dok, skp i jdp dswp law 600 xor dok dap dok jmp . 1 law rst dap .-2 jmp cr txp, 0 dap txy txy, lio idx .-1 lac const3 rcl 6s sad const4 /lai jmp i txp sad . 2 jmp txy swp tyo lia jmp txy 2 trr, law m1 jdp txp dsm m1, text /tape error while reading directory_/ repeat ifp .-400,[ printx / data on first page exceeds space provided /] >>35<< dcom, 0 /skip on bad comparison lxr (1-dirlx400 lac i ntb dirlx400-1 sas i 6000 dirlx400-1 jmp dbad SXX> jmp .-4 jmp i dcom dbad, idx dcom jdp dbad jmp i dcom dswp, 0 lxr (1-dirlx400 lac i ntb dirlx400-1 lio i 6000 dirlx400-1 dio i ntb dirlx400-1 dac i 6000 dirlx400-1 SXX> jmp .-5 jmp i dswp tbl, 660000 fil /command table - 4000 bit indicates no args needed 304000 name /print name of tape 650000 edi 610000 app 220000 sav 204000 tap0 /0F 014000 tap1 /1F 024000 tap2 /2F 034000 tap3 /3F 240000 uns 440000 mer 640000 del 670000 go 430000 loa 510000 ren 470000 pri 230000 tex 274000 swd /swap directories 674000 goa 454000 ctn /certainly loc 0 630000 ecm /edit and assemble m 450000 ecn /edit and assemble n 634000 ctm /certainly loc 2 654000 et /go to et 624000 ddt 474000 pr1 /print directory 264000 won /turn write permit on tble, bdmp, 0 law cbf dac tyin clc dac cbf jmp i bdmp u wdy, 0 lac wpm wtd, szf i sza jmp i wdy /don't even try to write if permit is off law (add jdp chd jmp wda lio (10 /directory ok law 6000 jdp tpe /read name lxr (-ffb wdy3, lac i ffb dbt sad i 6000 ffb jmp wdy2 jdp bdmp /dump character buffer law e24 /anomalous tape jmp rst1 wdy2, SXX= jmp wdy3 law dir2 jdp dirb law dir1 jdp dirb clc jdp tpe cla dap wtd jmp i wdy dirb, 0 lio (dirlxi dap rd1 A+II lac (add ntb jdp tpe lxr (-3 rd1, law . XMAI cmi CXA sal 8s add (6000 jdp tpe SXX> jmp rd1 jdp dcom jmp i dirb jdp bdmp /dump character buffer law e25 /hardware failure jmp rst1 WDA= IDX WPM ?TURN OFF WRITE PERMIT CR= LEM T"= CLI>>05<<cmi>>05<<cla>>05<<clf 7 dap er7 dap cd law 600 dap merg /set to normal,nonmerge mode aam lac tyin TAAM jmp cl t0, cli>>05<<cmi tyo jdp bdmp ZXAP t2, law i 1 A+XX>P jmp t0 /backup to beginning of line t3, tyi dio i cbf szs 30 jmp t4 lai sad (75 /backspace jmp t2 sad (40 /_ jmp t0 sad (77 /cr jmp t6 t4, SXXA sas (cbl-1 jmp t3 q, law cr jda txp 742172 add t6, cla>>05<<cma dac i cbf 1 /set end of buffer marker cl, law 1 dac af jsp ll stf 6 /, stf 5 /cr dzm as /space lxr (tbl-tble-1 cl1, SXX=| jmp q lio (770000 lac van A^IP| jmp cr xor i tble A^IP jmp cl1 lac i tble ral 8s rpf A~II law 2 A^I= jmp cl1 . law 3777 and i tble dap . 1 jmp . >>32<< /read symbol and terminator /name in van, value in pnu, flag 1 if not a number /skip 0, 1, 2 times if terminator is comma, c.r., space ll, dap ell clf 1 lxr (-4 dzm i pnu SXX> jmp .-2 law van dap lp1 stf 6 ti, aam lio tyin idx tyin TIIAP clf 6 szf 6 jmp ti lxr (-2 sad i tit 2 jmp lle SXX> jmp .-3 TAX lp1, lac cli rcl 6s sza jmp .-2 rcl 6s sza jmp tia X>>05<<II rcr 6s sni i jmp .-2 aam dac lp1 law 20 X~AP| ZX law 10 XMA|> stf 1 lac pnu TXI rir 3s rcl 3s dac pnu jmp ti tia, lac lp1 sas (lac van 3 idx lp1 dzm van 3 jmp lp1 tit, 0 /2 77 /1 33 /0 lle, CXX aam ell, jmp p /read file names and search directory /skip if end with cr, no skip if comma /return pointer to last directory block in AC, XR /F2 on to construct new blocks if name not found gef, 0 dzm sga clf 6 clf 5 lac ntb dac sfp gea, jsp ll jmp gel /, jmp gel /cr jmp gen-1 /space gel, stf 6 TXA dac sx lxr (ntb gen, law 777 and sfp skp 5 jmp guc sza i jmp gun /name not found lxr sfp jdp ttx law ntb X+AXI lac i 0 dac sfp lac van sza i jmp gou /no name typed dio sga sas i 1 jmp gen lac van 1 sas i 2 jmp gen lac van 2 sas i 3 jmp gen skp 6 /name found jmp got lac i 4 /more names to type sma jmp gea-1 er1, jdp car /"no subfile" error law e1 jdp txp jdp prn jmp cd r gun, TXXA dap gua jdp gfa lac sfp gua, dac sas ntb jmp . 4 law ntb XMAA dac ntb dzm i 0 lac van sza i jmp gos dac i 1 lac van 1 dac i 2 lac van 2 dac i 3 TXXA dac sga skp i 6 jmp gub lac (add dac i 4 jmp got gub, stf 5 law 4 A+XA dap guc jdp gfa jmp gea guc, dac add (ntb TAAX jmp gua 1 er3, jdp car lxr (van-1 jdp prn law e3 jdp txp jmp cd gos, lac (add xct guc law i 1 adm pdp sad (dac pdl-1 jmp erg 1 TXXA jdp flh gou, lxr sga TXXP| jmp erg got, lac gef add sx dap . 2 TXXA jmp w /get a directory block, demands F2 on /return it in sfp, XR /set across = -0, down = 0 gfa, 0 skp i 2 jmp er3 lac ntb 1 sza i jmp er2 dac sfp add (ntb TAAX lio i 0 dio ntb 1 pdp, dac pdl idx .-1 sad (dac pdl 37 jmp pce /push down list full clc dac i 0 dzm i 4 jmp i gfa pce, law e32 jdp txp jmp cd er2, jdp car /"directory full" error law e2 jdp txp cd, skp i jmp rem jdp bdmp law i 1 adm pdp sad (dac pdl-1 jmp rst dap . 1 lac jdp flh jmp cd 2 /delete all blocks of a file_.initial block number or zero in ac /anthing negative or low half = 0 ends it. xr saved uch, 0 sma jmp i uch and (777 TAAIP| jmp i uch X.IX lac i dbt dzm i dbt TIX jmp uch 1 rst, law pdl dap pdp rsp, lxr (ntb 2 rsa, lac i 4 TAAI|P jmp rsj TAAM and (lac TA=| jmp rsb rsd, lac i 4 jdp uch clc dac i 4 lac ntb 1 dac i 0 law ntb XMAA dac ntb 1 rsb, law 5 A+XAX sas (ntb 1000 jmp rsa skp 3 jmp q jmp cr rsj, TXXA jdp flh jmp rsp flh, 0 dac fla TAX lac i 4 ral 1 spa jmp i flh flz, lxr fla fli, lac i 4 spq jmp flb add (ntb 4 dap . 1 lac and (lac sza jmp flb law ntb lio i 4 A+IX lio i 0 sni i jmp .-3 jmp fli , flb, lac (lac ior i 4 dac i 4 lio i 0 dzm i 0 dio fle TIIM| jmp i flh law ntb dac svl XMAA sad ntb jmp fp5 dac flf lxr (-776 lio (5 flg, sad i ntb 1000 jmp fp0 sad i ntb 1004 jmp fp4 X+IX>= jmp flg jmp fp1 fp0, law ntb 1000 skp i fp4, law ntb 1004 A+XAX dac svl lac fle dac i 0 fp1, law ntb add flf sas fla jmp flz jmp i flh fp5, dio ntb jmp i flh l e1, text /no subfile of _/ e2, text /directory full_/ e3, text / not found_/ e4=e6+5 /text/field _/ e5, text / not assigned_/ e6, text /can't assign field _/ e7, text /illegal field number_/ e8, text / has subfiles_/ e11, text /tape error _/ e12, text /tape full_/ e13, text /anomalous directory_/ e14, text /anomalous text _/ e15, text /no write permit, type an "r" to try again _/ e20, text / 1_/ e22, text /directories do not match - both are ok_/ e23, text / 1 and 2_/ e24, text /anomalous tape_/ e25, text /hardware failure_/ e26, text /write not allowed_/ e27, text /drum error_/ e30, text /tape _/ e31, text / busy _/ e32, text /push down capacity exceeded _/ /format of directory entries /word 0_. pointer to next block on this level /word 1_. 1st three chars of name /word 2_. 2nd three /word 3_. 3rd three /word 4_. pointer to value / bit 0 => value is a file_,otherwise, list of subfiles / if bit 0 = 1 then the format of word 4 is the same as the / format of a tape block word /ntb contains pointer to directory /ntb+1 contains free directory block list /ntb+2 to ntb+777 contain 146 directory blocks /format of tape block entries in directory /each word has bit 0 = 1 /the right half of each word is a pointer to the next tape block /bits 2-8 of each word indicate the number of all-zero blocks to be /placed before the next block /a right half that is all 0 indicates that this is the last block of /a file that is nonzero. All zero blocks may follow. /dbt to dbt 777 contains 1000 tape block words /the file system and the directories occupy tape blocks 0-11 and /773-777. These blocks are chained together starting at word 0. /The tape name is encoded in the zero block field (bits 2-8) of /dbt to dbt 11 gnu, 0 jsp ll skp i stf 2 lac pnu skp i 1 jmp i gnu erg, jdp car stf 3 jmp cd /check field number in af /F2 on . want to write on it, assign if necessary /skip if pseudo field tf, 0 law i 40 lio af A^IA> jmp er7 sub (27 sma jmp er7 law 40 A^IAP jmp i tf idx tf law flexo tf arq sza jmp i tf skp i 2 /not assigned jmp er5 law flexo af arq jmp er6 jmp i tf ( , /read file name from typewriter, going to read file /put initial tape block in bkp and AC /point ucp and drd at value word /skip if end with comma, no skip if c.r. gtf, 0 jdp gef idx gtf law 4 X+AA dap ucp dap drd lac i 4 dac bkp spa jmp i gtf jdp car er8, jdp prn /"has subfiles" error law e8 jmp ex er5, xct er7 jmp era jdp car /"field n not assigned" law e4 jdp txp lac af jdp ocp law e5 ex, jdp txp jmp cd er6, jdp car /"can't assign field n" law e6 jdp txp lac af jdp ocp jmp cd ocp, 0 lio (law rcl 3s sni jmp .-2 sza opa, sni lio . 3 tyo cli rcl 620 sza jmp opa jmp i ocp b, 0 20400 1 del, jdp gef skp i stf 2 jdp flh skp i 2 jmp del jmp wre ren, jdp gef skp i jmp q dac reu lac i 1 dac sve lac i 4 dac rsi law 600 dap cd dac i 1 dzm i 4 stf 2 jdp gef jmp er4 TXA dac snx flt, lxr snx lac i 4 spq jmp flu add (ntb jdp flh jmp flt flu, jdp uch lac rsi dac i 4 lac reu jdp flh jmp wre er4, stf 3 rem, lxr reu lac sve dac i 1 lac rsi dac i 4 jmp cd 2 >>16<< go, jdp gnu sza dac af skp 2 jmp goa jdp gnu dac as skp i 2 jmp erg goa, clf 2 jdp tf nop gob, jdp rew lio af rir 6s law 7777 and as add (i-2 dap gol 1 dap gol 3 sad (i gol 2 jmp gol1 gol, lac (dcc dac . ZA jmp . gol1, lac (dcc dac gol 2 ZA jmp gol 2 ddt, jdp rew dsm rew, 0 jdp wdy clc>>05<<cli>>05<<cmi tyo jdp tpe law 16 szs i 60 mta 204 ZIXA lpf mta jmp i rew 1 mer, cla dap merg /set to merge mode uns, jdp gtf jmp una jdp gnu szf i 2 jmp erg sza dac af una, cla 2 jdp dro jmp rst er7, skp i jmp era law e7 /"illegal field number" jmp ex era, jdp car /"anomalous text" law e14 jmp ex won, law (add /rewind and turn write permit on jdp chd jmp . 2 dzm wpm /turn write permit back on clc jdp tpe /rewind jmp rst tap0, law 16 jmp tapn tap1, law 116 jmp tapn tap2, law 216 jmp tapn tap3, law 316 tapn, dac drum lio q 2 /downshift tyo jdp wdy law 16 mta 204 lac drum mta 306 jmp ntap lac (ivk 16 dac 0 ZXIA lpf jmp 0 ntap, law e30 jdp txp lac drum sar 6s jdp ocp law e31 jmp rst1 >>34<< drum, 0 dcc skp i jmp i drum law e27 jmp drer /drum error tpe, 0 dac tpe1 dio tpe2 and (-7777 lio wpm TIIP /skip if write permit on sas (add /skip if trying to write jmp tpa law e26 drer, jdp txp jmp fps fpt, law e15 jdp txp tyi law char rr A~IP jmp fps tpa, jdp tpb sad (6 jmp fpt jdp tpb dac ter law e11 jdp txp lac ter jdp ocp fps, idx wpm jmp cd tpb, 0 lac tpe1 lio tpe2 ivk 16 jmp i tpb jmp i tpe z edi, law 61 ed0, dac fld1 ed1, law 2 ed2, dac fld2 lac (and 400 dac b jdp eet lac fld1 dac af lac fld2 ed3, dac as jmp gob et, law 61 dac af jmp et1 ecm, law 62 jmp ed0 ecn, law 62 dac fld1 cla jmp ed2 ctm, law 62 dac af et1, law 2 jmp ed3 ctn, law 62 dac af cla jmp ed3 app, jdp afp jmp apr tex, lac (and 400 dac b apr, jdp eet jmp rst fil, stf 2 jdp gtf skp i jmp erg clf 2 jdp afp stf 2 law i 400 add b dac hig lac (and jmp sav3 eet, 0 /read text files beginning at drum address in b law 6400 dap eea dap eeb . eec, jdp gtf /read file name from typewriter jmp eek eea, dac . /save initial block idx eea jmp eec eek, xct eea eeb, lac . dac bkp /initial block idx eeb sub eea sad (lac-dac 2 jmp eel /no more files law i 7777 and b ral 6s dac af law 7777 and b jdp dro lac 6377 sad (131313 jmp eep add b sub (and 400 dac sb sub afn sub ofs lia law 400 spi A+IA> jmp ant add (5777 dap . 1 lac sad (131313 jmp een ant, law e14 /"anomalous text" error jdp txp lac eeb sub (lac 6400 jdp ocp jdp car eep, lac ofs add afn skp i een, lac sb /next drum address dac b jmp eeb eel, lio (20372 mta 1 law b lio (2 jdp drum jmp i eet 4 /check that text on drum is in good form, put end+1 in b afp, 0 law 2 dac af law 600 dap er7 jdp tf hlt law 372 mta law b lio (20001 jdp drum afs, law i 1 add b dac drum /save pointer to 131313 word of text ral 6s and (17 sub af sza i jmp afr spa jmp era idx af jdp tf hlt jmp afs afr, law 7777 and drum /load pointer to 131313 word of text mta lac af rar 6s SAI law tf jdp drum lac tf sas (131313 jmp era jmp i afp /read file and put on drum /initial tape block in bkp, initial field in af /initial drum address in AC /after return, afn+ofs = next drum address and field /splits fields properly -- F6 . split transfer /F5 . zero blocks being written on drum dro, 0 dac ofs clf 2 xct merg /skip if merge operation stf 2 jdp tf jmp er7 dro1, clf 6 lio af rir 6s dio afn lac (177777 lio bkp A^IAP| jmp i dro and (777 dac blk /block to be read lac (177000 clf 5 A^IAP stf 5 law 7777 and ofs sad ofs jmp drp dac ofs drr, idx af lac (i adm afn jdp tf jmp er7 skp 6 jmp sp2 /finishing a split transfer drp, szf 5 jmp drp2 lio blk law 7777 A^II law 6000 jdp tpe /read a block jmp drp1 drp2, law i 1000 adm bkp lxr (-400 dzm i 6400 SXX= jmp .-2 drp1, law 377 add ofs and (-7777 sza jmp sp1 /overlaps fields merg, skp i 600 jmp nmerg /no merge-this is normal mode lac ofs mta law 400 ior afn lia law 6400 jdp drum /read current block from drum lxr (-400 lac i 7000 xor i 6400 dac i 6400 /xor new and old field SXX= jmp .-4 nmerg, lac afn add ofs mta lio (400 law 6000 sp4, jdp drum /write on field drs, law 400 skp i 6 adm ofs drt, lxr blk lac i dbt szf i 5 /still working on current pointer dac bkp /next block number jmp dro1 sp1, lac (i /need to split the drum transfer sub ofs lia>>05<<stf 6 lac afn add ofs mta law 6000 jdp drum /low part A+II dio sp3 law i 7400 adm ofs jmp drr /go to next field sp2, lio afn mta 1 lio sp3 law 6400 AMIA swp jmp sp4 /do second part >>17<< pri, jdp gef skp i stf 2 lxr i 4 jmp prh pr1, szf i 6 stf 2 /print top level lxr ntb /print all prh, TXX> jmp erp jdp crp law c0 jdp txp prm, TXX|= jmp prp jdp ttx law ntb X+AX lac (dac pdl sub pdp dac nid sza i 2 jmp prv stf 6 jmp prw prv, jdp crp lac nid ZIP tyo SAA> jmp .-2 jdp prn prw, lac i 4 sma jmp phi jdp prz pru, swp adm bck lxr i 0 jmp prm phi, lac i 0 xct pdp idx pdp sad (dac pdl 37 jmp pce lxr i 4 jmp prm erp, TXXA jdp prz lai jdp ocp jmp rst prz, 0 cli and (777 sza i jmp i prz add (dbt dap . 2 SII lac jmp prz 2 z prp, law i 1 adm pdp dap . 1 lxr sas (dac pdl-1 jmp prm jdp crp jdp car law i 1000-ffb TAX lio i dbt 1000 sni SAA SXX= jmp .-4 dac sve /free blocks szs i 10 jdp ocp law c1 szs i 10 jdp txp law i 1 CAX lxr i ntb SAA TXXP jmp .-3 dac rsi /free directory entries mul (3 lac sve AMI>= /print if less than 1/6 of directory blocks free law 60 AMI>= /or less than 10 blocks free jmp rst lac rsi jdp ocp law c2 szs i 10 rst1, jdp txp jmp rst c0, text / file blocks _/ c1, text / free blocks _/ c2, text / free directory entries _/ crp, 0 lac bck TA|M jmp crq lio (5736 tyo sir 6s skp 6 tyo lac bck a jdp ocp lio (55 skp 6 tyo crq, clc 6 dac bck jdp car jmp i crp bck, -0 d dri, 0 dac ofs dzm fb /current tape position dzm dir /current tape direction dzm eflg /use to determine if tape is full dre, dzm t drl, law 400 dap afn adm ofs dip afn sub hig spa jmp drg drn, skp 2 skp 4 jmp drn2 jmp drh drn1, law rst1 dac dri /tape full drn2, lac t ior (add xct drd law e12 /tape full message jmp i dri drh, stf 4 drg, law 7777 and ofs mta lio afn law 6000 jdp drum lac t sad (177000 jmp drk law i 400 TAX sas i 6400 jmp drk /block is nonzero SXX= jmp .-3 law 1000 adm t /block is all zero jmp drl nxtblk, 0 next, lac fb rar 8s xor dir and (1 ior (776 sub fb sma sad fb isp dir /always skips TAAX| jmp next dac fb jmp i nxtblk j drk, skp i 4 jmp tbp law 377 lio b A^IA= dio 6377 tbp, lxr fb tbp1, lio i dbt /load tape block descriptor block TII=| jmp tbp2 jdp nxtblk /get next block, block ptr left in A,X sas (777 jmp tbp1 lio eflg TIIP| jmp drn1 dzm eflg jmp tbp1 tbp2, lac (add A+XIA ior t drd, dac and (777 add (dbt dap drd idx eflg /have found free block on this pass law 7777 A^II lac (add 6000 jdp tpe repeat pbs,jdp nxtblk /skip pbs blocks jmp dre >>76<< sav, law 1 dac as dac tem1 stf 2 jdp gtf jmp sav1 clf 2 jdp gnu dac af dac as dac tem1 szf 2 jmp sav1 jdp gnu dac as szf i 2 jmp erg sav1, clf 2 sav2, jdp tf nop lac af sad as jmp . 3 idx af jmp sav2 lio as lac tem1 AMII SAA rar 6s rir 6s AMII dio hig sub (i 400 sav3, dac drum law i 7777 ucp, ior jdp uch lac drum wre-1, jdp dri wre, law 600 dap wtd jmp rst g loa, law 1 dac fld1 dzm fld2 jdp gtf jmp loa1 clf 2 jdp gnu dac fld1 dac af szf 2 jmp loa1 jdp gnu dac as dac fld2 szf i 2 jmp erg loa1, cla jdp dro lac fld1 dac af lac fld2 dac as jmp goa name, lxr (-10. nam1, law 77 lio i dbt 10. ril 9s tyo A^II A~IP| jmp . 3 SXX= jmp nam1 jmp rst f repeat if2,[ printo [ffb-4]x400-. printx / /] 3000/ ntb, ntb 1000/ /directory blogks (146x5 words + 2 word header) dbt, dbt 1000/ /tape blocks 5000/ /program area 2 5000-5377 car, 0 cli>>05<<cmi tyo jmp i car prn, 0 law 1 dap . 1 lio i law i 3 dac t prr, ril 6s law 77 szs 10 jmp rst A^IA|= jmp i prn tyo isp t jmp prr idx prn 3 sas (lio i 4 jmp prn 3 jmp i prn g /check directory thoroughly chd, 0 dap erb1 /error printout law pdl 1 dap chf lac ntb dac pdl ZX chv6, lac i dbt ior (200000 spa sad i dbt jmp erb dac i dbt chv, and (777 TAXP jmp chv6 chv3, law i 1 adm chf aam lac chf mrk, TAXP| jmp chu jdp ttx lac i ntb chf, dac . ior (200000 sad i ntb jmp erb dac i ntb idx chf sad (dac pdl 37 jmp erb lac i ntb+4 spa jmp chv sza jmp mrk erb, jdp car law e13 jdp txp erb1, law . jdp txp jdp bdmp /dump character buffer idx wpm jmp i chd chu, lac (dac pdl sas chf jmp chv3 lac ntb+1 chw, TAXP| jmp chx jdp ttx lac i ntb ior (200000 sad i ntb jmp erb dac i ntb and (-200000 jmp chw chx, lxr (-776 chx+1, lac i ntb+1000 and (-200000 sad i ntb+1000 jmp erb dac i ntb+1000 law 5 A+XXP jmp chx+1 lxr (-1000 chy, lac i dbt 1000 sza i jmp .+6 and (-200000 sza sad i dbt+1000 jmp erb dac i dbt+1000 SXXP jmp chy idx chd jmp i chd ttx, 0 /check that XR points to a directory block law i 2 A+XA>P jmp erb mul (1 div . 1 5 law 1000 XMA> sni i jmp erb jmp i ttx constants repeat ifp [.-5400],[printx / data in program area 2 exceeds 400 words /] repeat if2,[printo 5400-. printx / /] n 5400/ /variables pdl, .+40/ af, 0 as, 0 sfp, 0 sx, 0 sga, 0 snx, 0 fla, 0 fle, 0 svl, 0 flf, 0 t, 0 bkp, 0 reu, 0 sve, 0 rsi, 0 ter, 0 sb, 0 ofs, 0 afn, 0 blk, 0 sp3, 0 nid, 0 hig, 0 bnl, 0 eflg, 0 dir, 0 fb, 0 tpe1, 0 tpe2, 0 fld1, 0 fld2, 0 wpm, 0 tem1, 0 van, van 4/ pnu, 0 tyin, 0 /pointer to character buffer cbf, 0 /character buffer 6000/ /tape-drum buffer 6000/ /second directory buffer 6000-7777 6400/ /merge buffer 6400-6777 7400/ /character buffer 7400-7777 d /initialization 6000/ jmp in /replace file system /here to initialize entire tape ini, iam clf 7 law m69 jdp txp lxr (-1000 dzm i dbt 1000 SXX= jmp .-2 jdp dirset cli>>05<<cmi law 2 dac ntb 1 ink, TAAX sad (1000 jmp inj law 5 X+AA dac i ntb dio i ntb 4 jmp ink inj, dzm ntb 773 dzm ntb inj1, law (774000 jdp chd hlt /bad directory, don't write it lio (dirlxi i dir2 lac (add ntb ivk 16 hlt lio (ffbxi inj2, lac (hlt dac 1 dac 3 lac ([ffb-dirl-1]xi 1 dac 0 dzm txp dzm chd lac (add ivk 16 hlt clc ivk 16 hlt dsm m69, text /type tape name _/ dirset, 0 lac (add lxr (-ffb ini1, SAA cli szf i 1 tyi swp sad (77 stf 1 swp ril 9s and (400777 A>>05<<IA lio i dbt ffb szf 6 cli sni i hlt dac i dbt ffb /save out directory space SXX= jmp ini1 cli>>05<<cmi tyo law dir2-ffb adm dbt ffb-1 lxr (-dirl-1 lio i dir2 dirl dbt 1 szf 6 cli TIIP jmp foob SXX= jmp .-6 fooc, lac dbt ffb-1 and (400777 lxr (-dirl-1 food, SAA lio i dir2 dirl dbt 1 szf 6 cli sni i hlt dac i dir2 dirl dbt 1 SXX= jmp food /save secondary directory space lac (add dac i dir2 dirl dbt jmp i dirset r foob, law m70 jdp txp tyi ZI lxr (-5 lac i dbt 1000 sza SII /count blocks needed SXX= jmp .-4 cmi lxr (-773 lac i dbt 773 sza i SII SXX= jmp .-4 TII>P jmp foob1 /not enough free blocks law 773 dac n /block currently being moved go1, lxr n lac i dbt sza i jmp index /index n lac (add A+XI lxr (dbt ffb lac i and (400777 A~IP| jmp found /found block pointing to n SXXA sas (dbt 1000 jmp .-6 lxr (ntb 6 /look in directory blocks go2, lac i /load value pointer and (400777 A~IP| jmp found /found pointer to block to be moved law 5 A+XXA sas (ntb 1004 jmp go2 hlt /not in directory blocks e.ther found, /XR points to pointer to be redirected TXI lxr (dbt lac i /find free block sza i jmp found2 /found free block SXXA sas (773 dbt jmp .-5 hlt /no free block this can't happen found2, X.IX /X contains pointer to block to be redirected law 777 A^II cma y and i /I contains pointer to free block A>>05<<IA dac i /redirect block law 777 A^IA /A contains pointer to free block dac acs lxr n lac i dbt dzm i dbt lxr acs dac i dbt /move pointer from block to freed block law 7400 lio n ivk 16 hlt /read block lio acs lac (add 7400 ivk 16 /move block hlt index, idx n sas (1000 jmp go1 jmp fooc m70, text /tape blocks must be moved, type a character to continue _/ foob1, law m71 jdp txp dsm m71, text /there are insufficient free blocks to move data _/ n, 0 acs, 0 0 in, clf 7 iam lio (dirlxi dir1 law ntb ivk 16 hlt /read old directory lac erb dac erbs lac (jmp i chd dac erb /catch illegal directory returns jdp chd jmp fix /directory is no good by new standard lac erbs dac erb lio (i 777 lac (add 5000 ivk 16 hlt lio (ffbxi-dirlxi jmp inj2 fix, law m69 jdp txp lio ([dirlxi] dir1 law ntb ivk 16 hlt jdp dirset lac erbs dac erb jmp inj1 erbs, 0 nme, clf 7 iam stf 6 law ntb lio (dirlxi dir1 ivk 16 hlt law m69 jdp txp jdp dirset jmp inj1 /write file system and directory constants start 0 4