doc@j.cc.purdue.edu (Craig Norborg) (05/24/87)
Below are the sources to echo, loadit, setlace and why written in 68000 assembly by Bryce Nesbitt. Enjoy, Craig Norborg # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # echo.asm # loadit.asm # setlace.asm # why.asm # This archive created: Sun May 24 00:52:39 1987 # By: Craig Norborg (Purdue University Computing Center) cat << \SHAR_EOF > echo.asm ;tabs every 8 ; ;SetLace implementation by Bryce Nesbitt, based on an example by Bob ;Pariseau of C-A. Public Domain. ; ;On most monitors a non-interlaced display will leave black bars between ;each scan line. This is evident in all the 200 line display modes of the ;Amiga 1000. For photographs or longer persistence displays this black is ;undesirable. SetLace instructs the system to set interlace; on each ;successive field the same display data will be painted in between that of ;the previous field. This may be a necessity for use of the Amiga with ;some NTSC video gear and broadcast television equipment. For most computer ;(non-broadcast) applications interlace will flicker unacceptably unless ;the contrast, brightness and room lighting are all turned way down. ; ;CLI Syntax: SetLace ;Flip (XOR) interlace ; SetLace 1 ;Turn lace on ; SetLace 0 ;Turn lace off ;Workbench: ;Flip (XOR) ;ALL screens will be forced to interlace ; ;Author correspondence, bug or stupidity reports may be directed to: ; Bryce Nesbitt ; 1712 Marin Ave. ; Berkeley, Ca 94707-2902 ************************* NOLIST INCLUDE 'exec/types.i' INCLUDE 'libraries/dosextens.i' INCLUDE 'graphics/display.i' INCLUDE 'graphics/gfxbase.i' ;INCLUDE 'lib/exec_lib.i' ;eliminates link with amiga.lib ;INCLUDE 'lib/dos_lib.i' ;non-standard, and very speedy! ;INCLUDE 'lib/intuition_lib.i' ;Can be fabricated from the fd.files ;INCLUDE 'lib/graphics_lib.i' ;directory. (see exec/exec_lib.i) LIST jsrlib macro xref _LVO\1 ;^Nuke for use as above^ jsr _LVO\1(a6) endm jmplib macro xref _LVO\1 jmp _LVO\1(a6) endm ************************** CODE startup: move.l a0,a4 ;CLI line pointer move.l d0,d4 ;CLI line length move.l 4,a6 suba.l a1,a1 ;Get THIS task jsrlib FindTask move.l d0,a5 moveq #0,d0 ;Set zero for later move.l pr_CLI(a5),d1 ;Pointer to CLI only structure bne.s fromCLI ;If not zero, then save a zero... ; ; If called from Workbench a message will be sent. This waits for it, ; and saves it's pointer to be returned to Workbench later. ; lea pr_MsgPort(a5),a0 jsrlib WaitPort lea pr_MsgPort(a5),a0 jsrlib GetMsg ;Message pointer in D0 moveq #0,d4 ;clear CLI line pointer fromCLI move.l d0,-(a7) ;Save message for later... ******************************** [A6=ExecBase][a5=this task][a4=CLI line] * [d4=CLI length] returncode equr d7 ibase equr d6 gbase equr d5 * (d4,a4,a5) moveq #20,returncode ;default to 'severe failure' code lea IntuiName(pc),a1 moveq #0,d0 jsrlib OpenLibrary move.l d0,ibase ;Error check. What a pain! Could we beq.s e_Intui ;not agree that Intuition and a few lea Graphname(pc),a1 ;other core libraries will always moveq #0,d0 ;be openable?? jsrlib OpenLibrary move.l d0,gbase beq.s e_Graph ; ;Modifying the system-wide bplcon0. From here we can change all screens ;to INTERLACE and turn tricks like disabling colorburst. The Forbid/ ;Permit pair is used for saftey while modifying this stuff. ; jsrlib Forbid move.l gbase,a6 ;gbase subq.l #2,d4 ;0=wb 1=cli no args 2=1 arg bmi.s flip ;wb, or cli flip bne.s toomanychars cmpi.b #'0',(a4) beq.s clear cmpi.b #'1',(a4) bne.s badargs setlace ori.w #INTERLACE,gb_system_bplcon0(a6) ;Set lace bra.s break clear andi.w #$ffff-INTERLACE,gb_system_bplcon0(a6) ;Clear lace bra.s break flip eori.w #INTERLACE,gb_system_bplcon0(a6) ;Flip lace break move.l ibase,a6 jsrlib RemakeDisplay ;The big one! Rethink ALL displays moveq #0,returncode ;Everything is OK! bra.s goodexit badargs toomanychars move.l #120,pr_Result2(a5) ;'arg line invalid or too long' moveq #10,d7 ;return code 10, less serious error goodexit move.l 4,a6 jsrlib Permit ; ;RemakeDisplay() is spec'ed to do a Forbid() and then Permit() around it's ; lengthy operation. This is just a saftey valve in case it did not... ; move.l gbase,a1 jsrlib CloseLibrary e_Graph move.l ibase,a1 jsrlib CloseLibrary e_Intui ******************************** (a7)+=message d7=return code ExitToDOS move.l (a7)+,d6 beq.s NotWB ;If saved pointer is zero, exit to CLI... ; ; Return the startup message to the parent Workbench tool. The forbid ; is needed so workbench can't UnLoadSeg() the code too early. ; move.l 4,a6 jsrlib Forbid move.l d6,a1 ;message pointer jsrlib ReplyMsg NotWB move.l d7,d0 ;Set "failat" code rts IntuiName dc.b 'intuition.library',0 Graphname dc.b 'graphics.library',0 MyName dc.b 'Bryce Nesbitt' ;-- this is the end -- SHAR_EOF cat << \SHAR_EOF > loadit.asm ; ; LoadIt (C)1987 Bryce Nesbitt. Revokable, free, non-exclusive licence ; hereby granted to any sentient being to use or abuse this code in any way ; whatsoever provided that this and any other copyright notices remain fully ; attached, and with the exception that, without prior written permission, ; it not be utilized by any entity that has been commonly referred to as ; Robert W. Skyles, Skyles Electric Works, Jim Drew, Regie Warren or any ; organization founded by, controlled, employing or profiting any such ; entity, it's offspring or spouses. FISH use ok. ; ; Author correspondence, bug or stupidity reports may be directed to: ; Bryce Nesbitt ;bryce@cogsci.Berkeley.EDU ; 1712 Marin Ave. ; Berkeley, Ca 96034-9412 ; ; USAGE: LoadIt <file> ; ; FUNCTION: Loads a file into memory, and reports the address. The ; file remains at that address until a re-boot. ; ; EXAMPLES: LoadIt c:install ; LoadIt Read Me ;No parsing is done. Quotes not needed ; ; BUGS: If there is an error during the read the allocated memory will ; not be returned. ; ; Proper size when assembled with the Metacompost assembler ; and BLINK'ed is 424 bytes ; ; RETURN CODE CONVENTION: ; ; FAIL (20) - serious error, no DOS, memory etc. ; ERROR (10) - user caused error. (file not found, syntax) ; WARN (5) - technicality such as file not found on DELETE. ; ************************** NOLIST INCLUDE 'libraries/dosextens.i' ;INCLUDE 'lib/exec_lib.i' ;eliminates link with amiga.lib ;INCLUDE 'lib/dos_lib.i' ;non-standard, but very speedy! LIST jsrlib macro xref _LVO\1 jsr _LVO\1(a6) endm blink macro bchg.b #1, $bfe001 endm ************************** CODE ; reserved1 equr a7 reserved2 equr a6 lock equr a5 handle equr a4 block equr a3 reserved3 equr a2 returncode equr d7 resultcode equr d6 size equr d5 inline equr d4 reserved4 equr d3 reserved5 equr d2 ;-- "parse" the string -- clr.b -1(a0,d0) ;null terminate string move.l a0,inline ;the quick and dirty way. ;-- Set defaults -- suba.l lock,lock suba.l handle,handle moveq #10,returncode ;default ERROR code ;-- Open DOS -- move.l 4,a6 lea DOSName(pc),a1 jsrlib OldOpenLibrary ;1.0 compatible move.l d0,a6 ;Look Ma, no error check! ;-- Get a lock -- move.l inline,d1 moveq #ACCESS_READ,d2 jsrlib Lock move.l d0,d1 move.l d0,lock beq.s e_lock ;-- Examine locked object [d1-lock] -- suba.l #fib_SIZEOF,a7 move.l a7,d2 ;[lock in d1] jsrlib Examine tst.l d0 ;grrr beq.s e_examine move.l fib_Size(a7),d0 adda.l #fib_SIZEOF,a7 move.l d0,size beq e_nosize ;-- Get enough memory to fit [d0-size] -- move.l a6,-(a7) ;[size in d0] moveq #0,d1 ;Any type of memory move.l 4,a6 jsrlib AllocMem move.l (a7)+,a6 move.l d0,block tst.l d0 ;grrr beq.s e_memory ;-- Open object -- move.l inline,d1 move.l #MODE_OLDFILE,d2 jsrlib Open move.l d0,handle move.l d0,d1 beq.s e_open ;-- Read entire thing -- ;[handle in d1] move.l block,d2 move.l size,d3 jsrlib Read cmp.l d0,d3 bne.s e_read ;-- Play leapfrog with deallocation -- moveq #0,returncode ;OK e_read e_open e_examine e_lock e_stuff jsrlib IoErr move.l d0,resultcode errorentry move.l handle,d1 beq.s noclose jsrlib Close noclose move.l lock,d1 beq.s nounlock jsrlib UnLock nounlock tst.l returncode beq.s noerrors ;-- print error -- lea nocans(pc),a2 moveq #nocane-nocans,d3 bsr.s DOWRITE ;error handling? bra.s closeup ;-- print stats -- noerrors lea itsats(pc),a2 moveq #itsate-itsats,d3 bsr.s DOWRITE ;error handling? move.l block,d0 moveq #',',d3 bsr.s PRINTLONGHEX ;error handling? lea sizes(pc),a2 moveq #sizee-sizes,d3 bsr.s DOWRITE ;error handling? move.l size,d0 moveq #10,d3 bsr.s PRINTLONGHEX ;error handling? ;-- Close up -- closeup move.l a6,a1 ;a6 had DosBase move.l 4,a6 jsrlib CloseLibrary suba.l a1,a1 ;zero out a1 jsrlib FindTask ;Find THIS task move.l d0,a0 move.l resultcode,pr_Result2(a0) ;set WHY (or RESULT) code move.l returncode,d0 rts ;-- Handle out of memory -- e_memory moveq #20,returncode ;upgrade to FAIL moveq #ERROR_NO_FREE_STORE,resultcode bra.s errorentry ;-- Set misleading error message for zero byte length file -- e_nosize moveq #ERROR_FILE_NOT_OBJECT,resultcode bra.s errorentry ; ;error=DOWRITE(buffer,length),dos ; z a2 d3<>0 ; DOWRITE jsrlib Output move.l d0,d1 beq.s e_noout move.l a2,d2 ;[length in d3] jsrlib Write e_noout ;cmp.l d0,d3 ;check for mismatch rts ; ;PRINTLONGHEX(value,terminator),dos ; d0 d3.b ; PRINTLONGHEX ;movem.l d0-d3/a0-a1,-(a7) subq.l #5,a7 ;Take 10 bytes from stack subq.l #5,a7 ;(it's smaller...) move.l a7,a0 moveq #7,d2 1$ rol.l #4,d0 move.l d0,d1 andi.w #$f,d1 move.b hextab2(pc,d1.w),(a0)+ dbra d2,1$ move.b d3,(a0) jsrlib Output move.l d0,d1 beq.s er_output move.l a7,d2 moveq #9,d3 jsrlib Write addq.l #5,a7 addq.l #5,a7 er_output er_lib ;movem.l (a7)+,d0-d3/a0-a1 rts DOSName dc.b 'dos.library',0 nocans dc.b 'Can',39,'t load file',10 nocane itsats dc.b 'File loaded at address $' itsate sizes dc.b ' size $' sizee hextab2 dc.b '0123456789ABCDEF' dc.b '(C)1987 Bryce Nesbitt' dc.b 1 ;release 1 ;-- That's all folks -- SHAR_EOF cat << \SHAR_EOF > setlace.asm ;tabs every 8 ; ;SetLace implementation by Bryce Nesbitt, based on an example by Bob ;Pariseau of C-A. Public Domain. ; ;On most monitors a non-interlaced display will leave black bars between ;each scan line. This is evident in all the 200 line display modes of the ;Amiga 1000. For photographs or longer persistence displays this black is ;undesirable. SetLace instructs the system to set interlace; on each ;successive field the same display data will be painted in between that of ;the previous field. This may be a necessity for use of the Amiga with ;some NTSC video gear and broadcast television equipment. For most computer ;(non-broadcast) applications interlace will flicker unacceptably unless ;the contrast, brightness and room lighting are all turned way down. ; ;CLI Syntax: SetLace ;Flip (XOR) interlace ; SetLace 1 ;Turn lace on ; SetLace 0 ;Turn lace off ;Workbench: ;Flip (XOR) ;ALL screens will be forced to interlace ; ;Author correspondence, bug or stupidity reports may be directed to: ; Bryce Nesbitt ; 1712 Marin Ave. ; Berkeley, Ca 94707-2902 ************************* NOLIST INCLUDE 'exec/types.i' INCLUDE 'libraries/dosextens.i' INCLUDE 'graphics/display.i' INCLUDE 'graphics/gfxbase.i' ;INCLUDE 'lib/exec_lib.i' ;eliminates link with amiga.lib ;INCLUDE 'lib/dos_lib.i' ;non-standard, and very speedy! ;INCLUDE 'lib/intuition_lib.i' ;Can be fabricated from the fd.files ;INCLUDE 'lib/graphics_lib.i' ;directory. (see exec/exec_lib.i) LIST jsrlib macro xref _LVO\1 ;^Nuke for use as above^ jsr _LVO\1(a6) endm jmplib macro xref _LVO\1 jmp _LVO\1(a6) endm ************************** CODE startup: move.l a0,a4 ;CLI line pointer move.l d0,d4 ;CLI line length move.l 4,a6 suba.l a1,a1 ;Get THIS task jsrlib FindTask move.l d0,a5 moveq #0,d0 ;Set zero for later move.l pr_CLI(a5),d1 ;Pointer to CLI only structure bne.s fromCLI ;If not zero, then save a zero... ; ; If called from Workbench a message will be sent. This waits for it, ; and saves it's pointer to be returned to Workbench later. ; lea pr_MsgPort(a5),a0 jsrlib WaitPort lea pr_MsgPort(a5),a0 jsrlib GetMsg ;Message pointer in D0 moveq #0,d4 ;clear CLI line pointer fromCLI move.l d0,-(a7) ;Save message for later... ******************************** [A6=ExecBase][a5=this task][a4=CLI line] * [d4=CLI length] returncode equr d7 ibase equr d6 gbase equr d5 * (d4,a4,a5) moveq #20,returncode ;default to 'severe failure' code lea IntuiName(pc),a1 moveq #0,d0 jsrlib OpenLibrary move.l d0,ibase ;Error check. What a pain! Could we beq.s e_Intui ;not agree that Intuition and a few lea Graphname(pc),a1 ;other core libraries will always moveq #0,d0 ;be openable?? jsrlib OpenLibrary move.l d0,gbase beq.s e_Graph ; ;Modifying the system-wide bplcon0. From here we can change all screens ;to INTERLACE and turn tricks like disabling colorburst. The Forbid/ ;Permit pair is used for saftey while modifying this stuff. ; jsrlib Forbid move.l gbase,a6 ;gbase subq.l #2,d4 ;0=wb 1=cli no args 2=1 arg bmi.s flip ;wb, or cli flip bne.s toomanychars cmpi.b #'0',(a4) beq.s clear cmpi.b #'1',(a4) bne.s badargs setlace ori.w #INTERLACE,gb_system_bplcon0(a6) ;Set lace bra.s break clear andi.w #$ffff-INTERLACE,gb_system_bplcon0(a6) ;Clear lace bra.s break flip eori.w #INTERLACE,gb_system_bplcon0(a6) ;Flip lace break move.l ibase,a6 jsrlib RemakeDisplay ;The big one! Rethink ALL displays moveq #0,returncode ;Everything is OK! bra.s goodexit badargs toomanychars move.l #120,pr_Result2(a5) ;'arg line invalid or too long' moveq #10,d7 ;return code 10, less serious error goodexit move.l 4,a6 jsrlib Permit ; ;RemakeDisplay() is spec'ed to do a Forbid() and then Permit() around it's ; lengthy operation. This is just a saftey valve in case it did not... ; move.l gbase,a1 jsrlib CloseLibrary e_Graph move.l ibase,a1 jsrlib CloseLibrary e_Intui ******************************** (a7)+=message d7=return code ExitToDOS move.l (a7)+,d6 beq.s NotWB ;If saved pointer is zero, exit to CLI... ; ; Return the startup message to the parent Workbench tool. The forbid ; is needed so workbench can't UnLoadSeg() the code too early. ; move.l 4,a6 jsrlib Forbid move.l d6,a1 ;message pointer jsrlib ReplyMsg NotWB move.l d7,d0 ;Set "failat" code rts IntuiName dc.b 'intuition.library',0 Graphname dc.b 'graphics.library',0 MyName dc.b 'Bryce Nesbitt' ;-- this is the end -- SHAR_EOF cat << \SHAR_EOF > why.asm ; Tabs set every 8. ; ;BETTERCLI(tm) "WHY" Command, release 1 ; ;BETTERCLI WHY (C)1987 Bryce Nesbitt. Unlimited free non-exclusive licence ;hereby granted to any sentient being to use or abuse this code in any way ;whatsoever provided that this and any other copyright notices remain fully ;attached and are reproduced in any simultaneously distributed printed matter ;and with the exception that, without prior written permission, it not ;be utilized by any entity that has been commonly referred to as Robert ;W. Skyles, Skyles Electric Works, Jim Drew, Regie Warren or any organization ;founded by, controlled, employing or profiting any such entity, it's ;offspring or spouses. ARP and FISH use welcome. ;Author correspondence, bug or stupidity reports may be directed to: ; Bryce Nesbitt ; 1712 Marin Ave. ; Berkeley, Ca 94707-2206 ; ;This program replaces the CLI WHY command, providing faster execution and ;enhanced functionality. The old WHY command was simply a stub that called ;'C:FAULT', and thus could not be made properly RESIDENT. This command was ;to replace FAULT as well, however the BCPL code does something funky ;when calling FAULT, and I could not discover it's secret. ; ; Return code convention: ; 20 FAIL -serious error, DOS will not open, out of memory. ; 10 ERROR -user caused error (syntax, file not found etc.) ; -less serious than FAIL. ; 5 WARN -technicality (file not found on DELETE, for example) ; 0 OK -command sucessful, operation completed. ; ;This code is REUSABLE,REENTRANT and fully RESIDENT COMPATIBLE. ;Stack 1600 ok. ************************* jsrlib macro xref _LVO\1 jsr _LVO\1(a6) endm jmplib macro xref _LVO\1 jmp _LVO\1(a6) endm ;INCLUDE 'lib/exec_lib.i' ;You don't have these files ;INCLUDE 'lib/dos_lib.i' ;so please ignore these lines. INCLUDE 'libraries/dosextens.i' ************************* CODE outhand equr d6 failcode equr d5 proc equr a5 cli equr a4 ;d0-d4 a0-a3 scratch ;-- Setup -- StartUp: moveq #20,failcode ;default-SEVERE failure move.l 4,a6 ;get exec library base pointer lea dosname(pc),a1 jsrlib OldOpenLibrary ;get this... Compatability with V1.0! move.l d0,outhand ;temp for DOSBase beq.s e_dos ;fail if it will not open suba.l a1,a1 ;find THIS task jsrlib FindTask move.l d0,proc move.l pr_CLI(proc),cli adda.l cli,cli ;ban the BPTR!! adda.l cli,cli ;ban the BPTR!! move.l outhand,a6 ;DOSBase jsrlib Output move.l d0,outhand beq.s e_output ;-- lea mes1s(pc),a0 ;'Fail code ' moveq #mes1e-mes1s,d3 bsr.s DOWRITED ;-- Get fail code -- move.l cli_ReturnCode(cli),d0 bsr.s PRINTDECIMAL ;-- lea mes2s(pc),a0 ;'and error code ' moveq #mes2e-mes2s,d3 bsr.s DOWRITED ;-- Print error number -- move.l cli_Result2(cli),d0 bsr.s PRINTDECIMAL ;-- lea mes3s(pc),a0 ;';' moveq #mes3e-mes3s,d3 bsr.s DOWRITED ;-- Print error text -- move.l cli_Result2(cli),d0 bsr.s PCODE moveq #0,failcode e_error e_output move.l a6,a1 move.l 4,a6 jsrlib CloseLibrary e_dos move.l failcode,d0 rts1 rts ; ;DOWRITED(pointer,length) ; a0 d3 ;Aborts if error ; DOWRITED ;[d3=length] move.l a0,d2 move.l outhand,d1 jsrlib Write cmp.l d0,d3 beq.s rts1 e_badwrite addq.l #4,a7 ;pop return off stack jsrlib IoErr move.l d0,pr_Result2(proc) bra.s e_error ;(return code is set to FAIL, 20) ; ; ; PCODE moveq #10,d1 lea table(pc),a1 checknext move.l a1,a0 ;Save pointer to this line moveq #-1,d3 findend cmp.b (a1)+,d1 ;count length dbeq d3,findend ;68010 loop mode! neg.l d3 ;compensate for backwards count subq.l #1,d3 ;tweak cmp.b #$ff,(a0) beq.s gotit ;end of list, use default cmp.b (a0),d0 bne.s checknext gotit addq.l #1,a0 ;skip error # bra.s DOWRITED ;[a0-string|d3-len] ; ;Bloated, slow, kludg-o 32 bit signed print decimal routine. ;destroys D2,D3 ; countvar equr d1 tableoffset equr d2 PRINTDECIMAL moveq #-4,tableoffset subq.l #6,a7 subq.l #6,a7 ;reserve 12 bytes for number move.l a7,a0 tst.l d0 beq.s zero bpl.s positive move.b #'-',(a0)+ neg.l d0 positive addq.l #4,tableoffset cmp.l table2(pc,tableoffset.l),d0 bcs.s positive ;BLO doloop move.l table2(pc,tableoffset.w),countvar beq.s endofnum moveq #-1,countvar subloop addq.l #1,countvar sub.l table2(pc,tableoffset.w),d0 bcc.s subloop add.l table2(pc,tableoffset.w),d0 ;Ooops! Too far!! ori.b #$30,countvar move.b countvar,(a0)+ addq.l #4,tableoffset bra.s doloop zero move.b #$30,(a0)+ endofnum suba.l a7,a0 move.l a0,d3 move.l a7,d2 move.l outhand,d1 jsrlib Write addq.l #6,a7 addq.l #6,a7 cmp.l d0,d3 bne.s e_badwrite rts table2 dc.l 1000000000 dc.l 100000000 dc.l 10000000 dc.l 1000000 dc.l 100000 dc.l 10000 dc.l 1000 dc.l 100 dc.l 10 dc.l 1 dc.l 0 dosname dc.b 'dos.library',0 mes1s dc.b 'Fail code ' mes1e mes2s dc.b ', and error code ' mes2e mes3s dc.b '; ' mes3e dc.b '(C)1987 Bryce Nesbitt' ; ;Error message table. Feel free to translate into other languages such as ;German, Italian, or even English. Error numbers 200 and 201 ;are unauthorized 'enhancments' to the standard. ; table dc.b 103,'insufficient free store',10 dc.b 105,'task table full',10 ;!!Eliminate need!! dc.b 120,'argument line invalid or too long',10 dc.b 121,'file is not an object module',10 dc.b 122,'invalid resident library during load',10 dc.b 200,'internal error',10 dc.b 201,'newer operating system required',10 dc.b 202,'object in use',10 dc.b 203,'object already exists',10 dc.b 204,'directory not found',10 dc.b 205,'object not found',10 dc.b 206,'invalid window description',10 ;dc.b 207,'object too large',10 ;obsolete dc.b 209,'packet request type unknown',10 dc.b 210,'stream name component invalid',10 ;what?? dc.b 211,'invalid object lock',10 dc.b 212,'object not of required type',10 dc.b 213,'disk not validated',10 dc.b 214,'disk write-protected',10 dc.b 215,'rename across devices attempted',10 dc.b 216,'directory not empty',10 ;dc.b 217,'too many levels;,10 ;obsolete dc.b 218,'device (or volume) not mounted',10 dc.b 219,'seek failure',10 dc.b 220,'comment too big',10 dc.b 221,'disk full',10 dc.b 222,'file is protected from deletion',10 dc.b 223,'file is write protected',10 dc.b 224,'file is read protected',10 dc.b 225,'not a valid DOS disk',10 dc.b 226,'no disk in drive',10 ;dc.b 227,'can',$27,'t open window',10 ;dc.b 228,'can',$27,'t open screen',10 dc.b 232,'no more entries in directory',10 dc.b 255,'no error message',10 ;-- end -- SHAR_EOF # End of shell archive exit 0