From <@IBM1.CC.Lehigh.Edu:LJM3@LEHIGH.BITNET> Mon Oct 30 16:25:13 1989 Received: from IBM1.CC.Lehigh.Edu by wubios.WUstl.EDU (4.0/Sun UNIX 4.0); Mon, 30 Oct 89 16:25:00 CST Received: from LEHIGH.BITNET by IBM1.CC.Lehigh.Edu (IBM VM SMTP R1.2.1MX) with BSMTP id 3689; Mon, 30 Oct 89 17:24:51 EST Received: by LEHIGH (Mailer X1.25) id 2677; Mon, 30 Oct 89 17:24:30 EST Date: MON OCT 30, 1989 17.15.31 EST From: "Al McLennan" Subject: New en/decoder To: "David J. Camp" Status: OR This past summer I got involved with XFER-L, which was put together to tackle the transfer problems PHYS-L was having. (Both lists at UCF1VM.) The result was an encode/decoder combination (lcoder.exe) which can do either XXE or HEX alphabets. It is set up so on decoding any characters extraneous to the encoding alphabet are stripped out; this makes it immune to a chronic problem with our MUSIC system, which can't handle wrong-format transmission. I'm sending a file below which can be used to construct it, and would very much appreciate any comments from you. It was written in assembler, and I'll send source if you're interested. Regards, Al ********File follows******** STARTUP.KIT, by Al McLennan, LJM3@LEHIGH.bitnet The purpose of this file is to construct the program LCODER.EXE, which is a PC-based encoder/decoder for file transfers. This file contains three parts which are separated by cut lines (=========). The first part is these instructions. With your word processor, you should separate out the second and third parts into two files. (Note the warning below regarding some word processors.) The second part is assembly code for a very short decoder. This part should be put into a file called SHORT.SRC Finally there is the desired program in hex-coded form, which MUST be filed as LCODER.HEX. After you have both files SHORT.SRC and LCODER.HEX you can assemble your short decoder using DEBUG (which comes with DOS). To do this, at the DOS prompt enter debug < short.src You then sit back and watch debug assemble the code, which takes (on my old XT) about 20 seconds. The program short.com should emerge. You only use this once, to decode LCODER.HEX into LCODER.EXE, by typing SHORT at the DOS prompt. SHORT.COM has no other use, and so can be deleted once you have obtained LCODER.EXE. Be sure to make the file LCODER.HEX before you run SHORT, as SHORT.COM will have nothing to do if it can't find LCODER.HEX in the current directory. This procedure may seem convoluted, but is one solution to the problem that you can't get a decoder because of the reason you want it. You have no doubt obtained this file by transfer over bitnet, and so it may be mangled. However this is a straight text file, and any mangling may be evident on inspection. If it doesn't work and doesn't look right, perhaps you can fix it up. One of the main points is that between the first line of code for short.com ("a 100") and the 150- something'th line ("ret") there should be no blank lines, then there should be one blank line, and finally 11 consecutive lines with no blanks. The last two of these lines should be "w" and "q". (Extra spaces anywhere don't hurt. The blank line, for example, can contain spaces.) It is possible that your word processor may introduce extraneous control and extended-ASCII characters. This will cause DEBUG to display an error message and the resulting SHORT.COM will probably hang-up your PC. If your word processor is of this kind, it should have both a "document" and a "non-document" mode. The file SHORT.SRC should be written as a non-document file to avoid the problem. LCODER.HEX can be written in either mode, as the extraneous characters should not affect the decoding process. After you have obtained LCODER.EXE, it can be used to encode files, or to decode files which were encoded by itself. Encoding can be done with the XXE alphabet, which was developed by Phil Howard, adapted to MS-DOS by David Camp, and revised for Turbo-C by Karl-l. Noell. There is also the option of using the HEX alphabet, consisting of the characters 0-9, A-F. HEX files are somewhat longer, but may be more immune to transfer problems. On encoding, LCODER gives the output file an extension of XFR or HEX depending on which alphabet is used. The output file contains a two-line HEX-encoded header (following the "begin") which has directory information on the encoded file, a checksum for the header, and a two-byte CRC for the encoded data. On decoding, any characters extraneous to the encoding alphabet are stripped out, and information in the header is used to help insure faithful reproduction of the original file. Unfortunately, the decoding method and header also make LCODER incompatible with other encode/decoders. ================ cut here for short.src ======================== a 100 push cs pop es cld mov bx,00c8 mov ah,4a int 21 mov sp,0c80 mov ah,48 mov bx,0300 int 21 mov [024a],ax mov ah,48 mov bx,0150 int 21 mov bp,ax call 0153 call 01d4 call 0176 call 01f5 call 0134 mov ax,4c00 int 21 mov dx,023f mov ah,3c xor cx,cx int 21 jb 012f mov bx,ax mov cx,[024e] mov ds,bp xor dx,dx mov ax,4000 int 21 mov ah,3e int 21 ret mov dx,0234 mov ax,3d00 int 21 jb 012f mov bx,ax push ds mov cx,2ee0 xor dx,dx mov ax,[024a] mov ds,ax mov ax,3f00 int 21 pop ds jb 012f mov [024c],ax ret xor bx,bx mov cx,[024c] mov ax,[024a] mov es,ax mov di,bx mov si,0252 mov al,[si] repnz scasb jcxz 012f mov bx,di es: mov al,[di] inc di dec cx jcxz 012f call 01c0 jb 018c inc si cmp al,[si] jnz 0181 cmp si,025b jb 018c mov ax,di add ax,[0250] mov si,ax xor di,di mov cx,[024c] sub cx,si mov [024c],cx push ds push es pop ds repz movsb pop ds ret cmp al,30 jb 01d2 cmp al,39 jbe 01d0 cmp al,41 jb 01d2 cmp al,46 ja 01d2 clc ret stc ret push ds mov ax,[024a] mov es,ax xor si,si mov di,si mov cx,[024c] jcxz 01ef push es pop ds lodsb call 01c0 jb 01ed stosb loop 01e6 pop ds mov [024c],di ret push dx push ds xor dx,dx mov cx,[024c] shr cx,1 mov es,bp mov ax,[024a] mov ds,ax xor si,si xor di,di call 0216 loop 020a pop ds pop dx mov [024e],di ret push cx lodsw cmp al,39 jbe 021e sub al,07 sub al,30 mov cl,04 shl al,cl cmp ah,39 jbe 022c sub ah,07 sub ah,30 add al,ah stosb pop cx ret e 234 6C 63 6F 64 65 72 2E 68 65 78 00 6C e 240 63 6F 64 65 72 2E 65 78 65 00 00 00 00 00 00 00 e 250 6E 00 36 32 36 35 36 37 36 39 36 45 00 00 00 00 n short.com rcx 15c w q ===================== end of short.src ==================== Now pick out the remaining material and file it as lcoder.hex. ===================== start of lcoder.hex ================= Lehigh coder. Version 0.6. Comments to Al McLennan, LJM3@LEHIGH.bitnet. Directory entry for encoded file: LCODER.EXE 5264 20 OCT 89 08:56 begin 626567696E00010100620000901451860000000000000000000000000000 54130647000090144C434F4445522E455845000000000000000000000000 4D5A90000B00010020000000FFFF190100013B00000000001E0000000100 010000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 0000BBBD008EDB8CC3891EEA04E8EC018D160000B409CD218D164000B409 CD21E80F057207FE06B005E82101E80000E8DB018D167300B409CD218D3E C404E861028D36C4048D3EA404B90D00F3A48D36C4048D3EC803B90D001E 07AC0AC07403AAE2F8C7062505B007C7062705BF078D169800B409CD21E8 C8047333C606860401C706FA0400B4C706FC0400B4C70629052D008D36E7 048D3EE404B90300F3A4E84E07C70625050408C70627051308E82D02E854 02E88A02E8D502E85B03E81704723AC706B1050000C706B3050000E87303 E8CB03E88604E8FC04E84106E87905F7060A050100750BE8EB04E83006E8 6805EBEDE87704E81C06EB4B90C706B1050000C706B3050000FE068304E8 3503E88D03E84804C70688040000C7068A0400008B0E0C05E8AE04E8F305 E82B05F7060A0501007502E2EDE83204E8D705F7060A05010074B6E8C305 E87C01FF36F404FF36F6048F06F4048F06F604C706FA0400F8E8A7008D16 0102B409CD218D3EC404E82D01E80107A18A04A30405A18804A30205E8A4 08721E8D168702B409CD218D36A404E85105E80503E8F606E86C05E87205 E822018D168702B409CD218D36A404E83305E8E702E8D806E84E05A08404 3A068304762DFE068304C7061D050000C706B1050000C706B3050000E866 08E89506A18A04A30405A18804A30205E8A106EBC7E81E05E8CE00C3B430 CD213C027201C38D16F100E8C200C38CD3A1EA042BD883C3104343B44ACD 211E078B1EF4043B1EF804767283C310F606B00501740383C315B448CD21 A3EC04731C3D070074573D08007552D12EF404D12EF604D12EFA04D1260C 05EBC4B4488B1EF60483C310F606B00501740383C315CD21A3EE0473253D 070074213D0800751CD12EF404D12EF604D12EFA04D1260C05A1EC048EC0 B449CD21EB85C38D160C01E82C00B40ABA0E05CD211E078BF246AC8AC8B5 00E313FCAC3C20740B3C6172063C7A77022C20AAE2EEC3B44CCD21C3B409 CD218D164203B409CD21B44CCD21C38D16C404B43DB000CD217204A3D204 C38D162301B409CD218D36C404E8EB038D164203B409CD21E8C0FFB442B0 028B1ED204B90000BA0000CD218916A004A3A204B442B0008B1ED204B900 00BA0000CD21B800578B1ED204CD21890E9E0489169C04C38D3ED8038B16 A004A1A204B9000083F90A731BE825000BDB750B0BC075070BD27503EB0A 9080CA3052418BD3EBE00BC9750441B0305058AAE2FCC35150B90A008BC2 BA0000F7F18BD858F7F159C3A19C04E808008D3EE403E81D00C350D1E8B1 04D2E832E48AF858D0EC8ADCB90300D3E0D2E88AC88AC7C38BEC55505351 8B46FE8AC1D40A8BD8B0200AFF74048AC70430AA8AC30430AAB020AA8B5E FC8D366B0532FF4BD1E3D1E303F3B90200F3A58B46FA0450D40A8BD832C0 0AFF740C80FF0A720380EF0A8AC70430AA8AC30430AA595B585D8BE5C38D 3EF1038B1E9E048AC7B103D2E8E80F00B03AAA8BC3B105D3E8243FE80100 C3D40A05303086E0AA8AC4AAC31E07B90800F7060A050200740249498D36 C4048D3ED404AC3C2E74070AC07403AAE2F4F7060A050200740DA08304D4 0A80C430043086E0ABB02EAA8D36E404B90300F3A48D36C4048D3ED404B9 0C00F3A6E301C38D16A901E82EFE8D16D404B8003DCD2172168BD8B43ECD 218D16C902B409CD21E85A007303E808FE8D16D404B43C33C9CD217204A3 E204C38D162301E8F6FD8B16A004A1A204F736FC048BD80BC0742B3D0100 770681FAE8037220528D165801B409CD215AE815007211810E0A0502000B D2740143881E8404F9C3F8C3B401CD213C797502F8C33C597502F8C33C6E 7502F9C33C4E75E6F9C3B408CD213C0D7502F8C33C1B75F2F9C3B401CD21 3C687502F8C33C487502F8C33C787502F9C33C5875E6F9C3B80042B90000 BA25018B1EE204CD21C31E078B1EB105891E8C048D368304C606870400B9 3200BB0000AC02D8E2FBF6DB881E87048D367E048D3E0204E81502E81202 B800408B1EE204B91100BA9B05CD217222B80042B90000BA00008B1EE204 CD218D165903B925018B1EE204B80040CD217201C3E82401C3518D16B600 B409CD218D36C404E802011E8B0EFA04F606B00501740481C146018B161D 058B1ED204A1EC048ED8B8003F51CD21591F72323BC17406C7060A050100 F606B00501740903061D05A3F00459C3A3F004010621058316230500A1EC 048B0EF004E8630559C38D162301B409CD218D36C404E89A008D164203B4 09CD21E86FFC518D16DA00B409CD218D36D404E87F008B0EF2048B1EE204 1EA1EE048ED8B80040BA0000CD211F72063BC1720259C3E86E00C38D16DA 00B409CD218D36D404E84D00511E8B0EF2048B1E02050BDB75103B0E0405 760A8B0E0405810E0A050100290E0405831E0205008B1EE204A1EE048ED8 B80040BA000051CD21591F720C3BC17208A1EE04E8BE0459C3E81200C3B9 0D00B402AC0AC074068AD0CD21E2F5C3E810008D16D404B441CD218D1636 01E8C2FBC3B43E8B1ED204CD21C3B43E8B1EE204CD21C38D16CC00B409CD 215351551E8B2E0A05A1F00401068A048316880400BA0000F73629058BC8 8B361D05BF0000A1EE048EC0FC558BECFF362505FF3627058B1EFA04A1EC 048ED8FCE305FF56FEE2FB0BD2740AF746000100740FFF56FC8BE55D1F89 3EF2045D595BC38BE55D1F8916B305893EF20429162105831E230500B442 B0008B1ED2048B0E23058B162105CD215D595BC351B91E00E81800E2FBB8 0D0AAB59C350518BCAE80900E2FBB80D0AAB5958C351AC8AE0B104D2E804 303C3976020407AA8AC4240F04303C3976020407AA59C306A1EC048EC08D 362B058B3EFA04B94000F3A407C351B90F00E82E00E2FBB80D0AAB59C350 51558BEA8BC2BA0000B90300F7F18BC87306413EC7020000E80A00E2FBB8 0D0AAB5D5958C350535152AD50D0E8D0E8D7AA5850B90600D2E0D0E8D0E8 B90400D2EC02C4D7AA5AAC50B90400D2E6D0EED0EEB106D2E802C6D7AA58 243FD7AA5A595B58C3C7060A050000E85DFAE852FDE88C00E8EF00FF16AC 05FF16AE05C3E8F6FDF7060A0501007516E835FDFF16AC05FF16AE05E8E0 FDF7060A05010074EAA102050BC0751AA104050BC07513A085040AC07501 C38B1EB1053B1E8C047501C38D16FD02B409CD21C38D16CC00B409CD211E A1EC048EC0BE00008BFE8B0EF004E316061FAC3C30720D3C3976083C4172 053C467701AAE2EC1F893EF004C38B1E1D058B0EF004A1EC048EC08BFB8D 36BA048A04F2AEE3328BDF268A054749E329E82D0072F2463A0475E181FE C30472E78BF78B3E1D058B0EF00403CF2BCE890EF0041E061FF3A41FC38D 166402E868F93C30720E3C3976083C4172063C467702F8C3F9C31EB93700 D1E18B361D058BFEA1EC048ED88EC0ACE8D5FF72FAAAE2F71F568D3E8304 8B361D051E1E07B93700A1EC048ED8E80001E2FB1FB937008D368304BB00 00AC02D8E2FB0ADB74078D163902E803F95E8B3E1D058B0EF0042BCE890E F0041EA1EC048ED88EC0F3A41F8D36A4048D3ED404B90D001E07F3A48D36 C4048D3ED404B90D00F3A6E321F606860401740DC706AC05350BC706AE05 CA0AC3C706AC05DD08C706AE056D0AC38D16A901E8A3F8803E8404017413 A083043C01740AE8D1FC8D169E02E88BF8F9C3F8C31E07B908008D36C404 8BFEAC3C2E74070AC07403AAE2F483EF02A08304D40A80C430043086E0AB C3521E8B0EF004BA0000D1E9730142A1EE048EC0A1EC048ED833F633FFE3 05E81E00E2FBAC1F0BD2740C8B1EEC048EC357BF0000AA5F89161D05893E F2045AC351AD3C3976022C072C30B104D2E080FC39760380EC0780EC3002 C4AA59C3521E33D2A1F004D1E8730142D1E8730242428BC8A1EE048EC0A1 EC048ED8BE00008BFEE305E81800E2FB57BF00008BCA1E07F3A45F1F893E F20489161D055AC3505351B90406AD50D0E0D0E086E0D2E802C4AA5BAD50 D2E7D0E8D0E802C7AA5886E9D2E002C4AA595B58C38D16CC00B409CD211E A1EC048EC08B0EF0042B0E1D05724CE34A8B361D058BFE061FAC3C2B723B 75052C2BEB34903C2D75052C2CEB2B903C3072273C3977072C300402EB1C 903C4172183C5A77072C41040CEB0D903C6172093C7A77052C610426AAE2 BE1F893EF004C3505351568B1EB1058B36B3052BCEE31A1E8ED8F6C7809C D1E3AC02D89D740481F397A0E2EE1F891EB1055E595B58C300000D0A4C65 6869676820636F6465722E2056657273696F6E20302E362E0D0A55736520 6374726C2D627265616B20286374726C2D432920746F2061626F72742E24 0D0A0D0A50726573732072657475726E20286573632920746F206465636F 64652028656E636F64652920612066696C653A20240D0A456E746572206E 616D65206F662066696C6520746F20626520656E636F6465643A20240D0A 484558206F722058584520656E636F64696E673F2028482F582920240D0A 52656164696E6720696E7075742066696C6520240D0A50726F6365737369 6E672E240D0A57726974696E67206F75747075742066696C6520240D0A4E 65656420444F53207620322E30206F72206C617465722E240D0A496E7375 6666696369656E74206D656D6F72792E240D0A43616E2774206F70656E20 66696C6520240D0A4469736B2066756C6C206F72206F7468657220777269 7465206572726F722E240D0A4F75747075742066696C652077696C6C2062 65206C6172676572207468616E2036304B2E20446F20796F752077616E74 20746F2073706C697420697420696E746F2070617274733F2028592F4E29 240D0A496E70757420616E64206F75747075742066696C65732077696C6C 20686176652073616D65206E616D652E0D0A4368616E6765206E616D6520 6F6620696E7075742066696C6520616E642074727920616761696E2E240D 0A456E746572206E616D65206F662066696C6520746F206265206465636F 6465643A20240D0A43616E277420726561642066696C6520240D0A496E76 616C6964206865616465722E202043616E2774206465636F646520746869 732066696C652E240D0A4E6F206B65792E202043616E2774206465636F64 6520746869732066696C652E24202057696C6C206465636F646520746F20 66696C6520240D0A496E7075742066696C65206D75737420626520666972 73742070617274206F66207365726965732E240D0A4F7574707574206669 6C6520616C7265616479206578697374732E205772697465206F76657220 69743F2028592F4E2920240D0A5761726E696E673A204572726F72206465 74656374656420696E20696E7075742066696C652E204F75747075742066 696C65206D617920626520696E76616C69642E24202050726F6772616D20 7465726D696E6174696E672E244C656869676820636F6465722E20566572 73696F6E20302E362E0D0A436F6D6D656E747320746F20416C204D634C65 6E6E616E2C204C4A4D33404C45484947482E6269746E65742E0D0A0D0A44 69726563746F727920656E74727920666F7220656E636F6465642066696C 653A0D0A2020202020202020202020202020202020202020202020202020 2020202020202020202020202020202020202020200D0A0D0A626567696E 0D0A00000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000626567696E00010100000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000363236353637363936450000000000000000000000000000 000000000000000000000000000000000000484558584652000000000000 00000000400B800F68010078007800000000000000000000000000000100 0E00000000000000000000000000000000000000000000000000001E002B 2D303132333435363738394142434445464748494A4B4C4D4E4F50515253 5455565758595A6162636465666768696A6B6C6D6E6F7071727374757677 78797A4A414E20464542204D415220415052204D4159204A554E204A554C 2041554720534550204F4354204E4F562044454320656E64206F6620636F 646564206461746100000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000 end of coded data ===================== end of lcoder.hex ====================