RIAG Crate 010: 090 Volume 90
Item Preview
Share or Embed This Item
Flag this item for
RIAG Crate 010: 090 Volume 90
- Language
- English
Notes
Disk info for 090_Volume_90.dsk:
File Name: riag_010_090_Volume_90/090_Volume_90.dsk
Disk Name: DISK VOLUME #5
Physical Size (bytes): 143360
Free Space (bytes): 4352
Used Space (bytes): 139008
Physical Size (KB): 140
Free Space (KB): 4
Used Space (KB): 135
Archive Order: DOS
Disk Format: DOS 3.3
Total Sectors: 560
Free Sectors: 17
Used Sectors: 543
Tracks On Disk: 35
Sectors On Disk: 16
Disk directory for 090_Volume_90.dsk:
riag_010_090_Volume_90/090_Volume_90.dsk DISK VOLUME #5
* A 005 RUN THIS SECOND
* T 008 UPLOAD1
T 002 TO SYSOP
* T 073 REM II INSTRUCTIONS
T 002 UPLOAD2
T 002 OPINION
* T 047 ABBS1
* T 062 REMEMBER II
* T 035 INSTRUCTIONS
* A 003 BUILD USERS.OBJ
* T 013 ABBS3
* T 120 SYSOP INSTRUCTIONS
* T 103 WAPABBS NOTES
A 004 RUN THIS FIRST
DOS 3.3 format; 4,352 bytes free; 139,008 bytes used.
Text found in 090_Volume_90.dsk/ABBS1.txt:
SBTL 'I/O ROUTINES FOR ABBS'
*LST OFF
ORG $9400
MMSLOT EQU 3 MICROMODEM IS IN SLOT 3
SMPTR EQU $08 POINTER TO SM$ VALUE
TYPE EQU $1E 0=FROM, 1=TO, 2=DATE, 3=SUMMARY
BASL EQU $28
PROMPT EQU $33 ASCII VALUE OF PROMPT (<$80 IF PROGRAM IN EXECUTION)
CSW EQU $36 OUTPUT VECTOR
LINNUM EQU $50 LINE NUMBER USED BY 'GOTO' ROUTINE
HIMEM EQU $73
VARNAM EQU $81 NAME OF VARIABLE (CODED)
VARPNT EQU $83 POINTER TO VARIABLE'S VALUE
FACMO EQU $A0
FACLO EQU $A1
CHRGET EQU $B1 GET NEXT CHARACTER
CHRGOT EQU $B7 GET THIS CHARACTER
TXTPTR EQU $B8 POINTER TO PROGRAM TEXT
LOWTR EQU $9B USED BY 'GOTO' ROUTINE
ACTIVE EQU $E3 =1 IF SOMEONE IS ON ABBS, -1 FORCES HANGUP, 0 MEANS NO ONE IS ON
CKMASK EQU $EB IF NOT 0, IGNORE CTRL-C & CTRL-K
LINEMAX EQU $EC MAXIMUM ALLOWABLE LINE LENGTH
CLL EQU $ED CURRENT LINE LENGTH
CHAT EQU $EF =1 IF SYSOP IS IN, =0 IF SYSOP IS OUT
ALLOWLC EQU $F9 =1 IF LC ALLOWED, =0 IF LC NOT ALLOWED
TIME EQU $FA $FA,$FB,$FC ARE TIME COUNTERS
DOSON EQU $3EA MOVES CSW/KSW TO DOS
MODEM EQU $678+MMSLOT OH,X,X,ST,SET,MODE,TXE,BRS
LOCSE EQU $6F8+MMSLOT CONVERTS LOWER CASE INTO UPPER CASE IF =$20; LEAVES UNCHANGED IF =$00
FLAGS EQU $778+MMSLOT DISPO,DLS,X,LFI,TERM,TRAN,KBDE,DLG
N0 EQU MMSLOT*$10 USED BY MICROMODEM
CHAR EQU $778 DATA IS STORED HERE TEMPORARILY
CN EQU MMSLOT+$C0 USED BY MICROMODEM
DOSCOUT EQU $9EBD COUT THROUGH DOS
KBD EQU $C000 >=$80 MEANS KEY HAS BEEN PRESSED
KBDSTRB EQU $C010
PRINTER EQU $C080+$10 $10=SLOT 1
STATUS EQU $C086+N0 X,PE,OVRN,FE,RESET,NOT CD,TRE,RRF
DATA EQU $C087+N0 MICROMODEM SENDS/RECEIVES DATA THROUGH THIS LOCATION
OUT EQU CN*$100+$05 MICROMODEM OUTPUT ROUTINE
IIN EQU CN*$100+$07 MICROMODEM INPUT ROUTINE
FNDLIN EQU $D61A FINDS LINE NUMBER IN LINNUM/LINNUM+1
STKINI EQU $D683 CLEARS STACK
NEWSTT EQU $D7D2 EXECUTES STATEMENT BEGINNING AT TXTPTR
OUTDO EQU $DB5C OUTPUT A THROUGH APPLESOFT
CHKNUM EQU $DD6A MAKES SURE FAC IS A NUMBER
CHKSTR EQU $DD6C MAKES SURE FAC IS A STRING
FRMEVL EQU $DD7B EVALUATES FORMULA AT TXTPTR
CHKCOM EQU $DEBE CHECKS FOR COMMA AT TXTPTR
PTRGET EQU $DFE3 FIND VARIABLE, (Y,A) POINTS TO VALUE
PTRGET1 EQU $E053 FIND VARIABLE NAMED IN $B0.B1
AYINT EQU $E10C FAC -> INTEGER IN $A0 (H), $A1 (L)
GIVAYF EQU $E2F2 A,Y -> FAC
GETNUM EQU $E746 READ A 2 BYTE # INTO LINNUM FROM TXTPTR, CHECK FOR COMMA, AND READ A 1 BYTE # INTO X
MULT EQU $E97F MOVE THE PACKED # AT (Y,A) INTO ARG AND DO FAC = FAC * ARG
MOVMF EQU $EB2B FAC -> (Y,X)
FLOAT EQU $EB93 FLOAT THE SIGNED INTEGER IN A
COUT1 EQU $FDF0 OUTPUTS ACCUMULATOR TO SCREEN ONLY
SKP 2
ENTRY: LDX #$03
ENTRY1: LDA ADDRESSES,X
STA CSW,X
DEX
BPL ENTRY1
LDA #$4C "JMP" CODE
STA $3F5
LDA #>AND
STA $3F6
LDA #0
ABBSOFF: JSR IIN WAIT FOR RING
LDA MODEM
AND #$02 TXE
BEQ EXITI TAKEN IF PHONE NOT ANSWERED BY IIN
STA ACTIVE SET TO $02 IF PHONE ANSWERED
EXITI: JMP ECHO1
*
HANGUP: LDX #CN NEEDED BY MICROMODEM
LDY #N0 NEEDED BY MICROMODEM
LDA OUT ACTIVATE MICROMODEM ROM
JSR $CAB5 DISCONNECT
LDA #$00
STA ACTIVE CLEAR ACTIVE
LDA #$20
STA LOCSE ENABLE LOWERCASE TRANSLATION
LDA #$03 A,Y=1000
LDY #$E8 GOTO 1000
GOTO: PHA
LDA #$8D CR
JSR DOSCOUT CLEAR INPUT LINE
LDA #$84 CTRL-D
JSR DOSCOUT CLEAR FILE READ/WRITE
LDA #$8D CR
JSR DOSCOUT
PLA
STY LINNUM LINNUM/LINNUM+1 NOW HOLDS DESTINATION
STA LINNUM+1 LINE # (DECIMAL)
JSR FNDLIN SETS LOWTR TO LINE # IN LINNUM
LDX LOWTR
BNE SKIPI2
DEC LOWTR+1
SKIPI2: DEX
STX TXTPTR
LDA LOWTR+1
STA TXTPTR+1
JSR STKINI CLEAR STACK
JMP NEWSTT 'CONT' COMMAND
*
HANG: LDA #$64 FLASHING '$'
JSR COUT1
LDA #$73 FLASHING '3'
JSR COUT1 FREEZE IF APPLE FALLS OUT OF
JSR COUT1 DEFERRED EXECUTION MODE
HANG1: LDA KBD
BPL HANG1
STA KBDSTRB
CMP #$83 CTRL-C
BNE HANG1
LDA #$AF
LDY #$C8
JMP GOTO GOTO 45000
*
DOIN: INC TIME
BNE SKIPI3
INC TIME+1
BNE SKIPI3
INC TIME+2
HOP2: BEQ TOHANGUP TIMES OUT AFTER 7 MIN., 8 SEC.
SKIPI3: LDA PROMPT
BMI HANG
BIT ACTIVE
BVS RDKEYBD TAKEN IF ONLY KEYBOARD IS ACTIVE
LDA STATUS THIS IS REVISED IIN ROUTINE
LSR A MOVE RRF TO C
AND #$02 NOT CARRIER DETECT
BEQ YESCARR
TOHANGUP: JMP HANGUP TAKEN IF CARRIER LOST
YESCARR: BCC RDKEYBD TAKEN IF RRF IS CLEAR
LDA DATA
ORA #$80 SET MSB
STA CHAR
GOTOOK: JMP OK
RDKEYBD: LDA KBD READ KEYBOARD
BPL DOIN TAKEN IF NO KEY PRESSED
STA CHAR
STA KBDSTRB TURN OFF KEYBOARD STROBE
CMP #$81 CTRL-A
BNE GOTOOK TAKEN IF NOT CTRL-A
LDA #$8D CR
JSR COUT1 PRINT 'MM II:'
LDA #'M'
JSR COUT1
JSR COUT1
LDA #' '
JSR COUT1
LDA #'I'
JSR COUT1
JSR COUT1
LDA #':'
JSR COUT1
LOOPI1: LDA KBD READ KEYBOARD AGAIN
BPL LOOPI1
STA KBDSTRB TURN OFF KEYBOARD STROBE
STA CHAR
CMP #$9A CTRL-Z
HOP3: BEQ TOHANGUP
CMP #$82 CTRL-B
BNE NOTB
LDA #$10
LDY #$CC
JMP GOTO GOTO 4300
NOTB: CMP #$89 CTRL-I
BNE NOTI
LDA #$49 FLASHING 'I'
STA CHAT THE SYSOP IS IN
JSR COUT1
JMP IGNORE1
NOTI: CMP #$8F CTRL-O
BNE NOTO
LDA #$00
STA CHAT THE SYSOP IS OUT
LDA #$4F FLASHING 'O'
JSR COUT1
JMP IGNORE1
NOTO: CMP #$92 CTRL-R
BEQ OK FORCE USER INTO REMOTE MODE
CMP #$94 CTRL-T FORCE USER
BEQ OK INTO TERMINAL MODE (HALF DUPLEX)
CMP #$95 CTRL-U
BNE NOTANY
LDA #$55 "U", MSB OFF
STA VARNAM FIND U$
LDA #$80
STA VARNAM+1
JSR PTRGET1
LDY #$02
LOOPI2: LDA (VARPNT),Y
STA SMPTR-1,Y
DEY
BNE LOOPI2
LOOPI3: LDA (SMPTR),Y ONLY ENTERED WHEN Y=0
AND #$3F MAKE FLASHING
JSR COUT1
INY
CPY #$06 END OF U$+1
BNE LOOPI3
JMP IGNORE1
NOTANY: JMP DOIN IGNORE CTRL-A SEQUENCE
OK: STA CHAR
JSR PICK
CLC
ADC #$20 MAKE
EOR #$20 SCREEN
ORA #$80 NOT FLASH
STA (BASL),Y
BIT ACTIVE
BVS SKIPI5 TAKEN IF MODEM NOT ACTIVE
LDA CHAR RESUME PROCESSING
CMP #$FF
BEQ TOIGNORE COUNT BAD CHARACTERS?
LDA MODEM
AND #$02 TXE
BEQ HOP3 TAKEN TO HANGUP
LDA STATUS
AND #$70 PARITY ERROR, RECEIVER OVERRUN, FRAMING ERROR
BEQ SKIPI4 TAKEN IF NO ERRORS
JMP IGNORE1
SKIPI4: LDA FLAGS
ORA #$86 DISPO, TRAN & KBDE MUST ALWAYS BE SET
STA FLAGS
SKIPI5: LDA CHAR
CMP #$E1 LOWER CASE 'A'
BLT NOTLC2
CMP #$FB OPEN CURLY BRACKET
BGE NOTLC2
LDY ALLOWLC
BEQ NOTLC2
EOR LOCSE MAKE UPPER CASE
CMP #$E1
BLT SKIPI6
AND #$7F FOOL SYSTEM MONITOR
SKIPI6: STA CHAR
BNE ECHO
NOTLC2: CMP #$A0
BLT CONTROL TAKEN IF CHAR IS A CTRL-CHARACTER
ECHO: LDA CLL
CMP LINEMAX
BLT ECHO1 TAKEN IF CLL=LINEMAX
ECHO1: PLA
TAY RESTORE Y
PLA
TAX RESTORE X
LDA CHAR
STA PRINTER
RTS
*
CONTROL: CMP #$8D CARRIAGE RETURN
BEQ ECHO1 TREAT CR AS NORMAL CHARACTER
CMP #$88 BACKSPACE
BNE NOTBS
LDY CLL IGNORE BACKSPACE IF ALREADY AT
BEQ IGNORE LEFT MARGIN
JSR OUT SEND BS THROUGH MODEM
LDA #' ' SEND SPACE AS RUBOUT
JSR OUT
LDA #$88
STA CHAR
BNE ECHO1 TREAT BACKSPACE AS NORMAL CHARACTER
NOTBS: CMP #$95 CTRL-U
BNE NOTU
JSR PICK USE ABBS' SCREEN CHARACTER AS CHAR
STA CHAR
JMP ECHO
NOTU: LDA CKMASK
BNE NOTCK TAKEN IF CK NOT ALLOWED
LDA CHAR
CMP #$83 CTRL-C
BEQ YESCK
CMP #$8B CTRL-K
BNE NOTCK
YESCK: LDA #$07 A,Y=2000 (DECIMAL)
LDY #$D0 GOTO 2000
JMP GOTO
NOTCK: LDA CHAR
CMP #$8A CTRL-J (LINEFEED)
BNE NOTJ
LDA FLAGS
ORA #$10 TURN ON LFI
STA FLAGS
BNE IGNORE1 (ALWAYS TAKEN)
NOTJ: CMP #$98 CTRL-X
BNE NOTX
LDA #$DC BACKSLASH
JSR OUTPUT
LDA #$8D CR
JSR OUTPUT
LDA #'?'
JSR OUTPUT
PLA REMOVE Y
PLA X
LDA #$00
STA CLL SET CLL TO LEFT MARGIN
PHA RESTORE X
LDA #$01
PHA RESTORE Y
BNE IGNORE1 ALWAYS TAKEN
NOTX: CMP #$8C CTRL-L
BNE NOTL
LDA LOCSE
EOR #$20 TOGGLE LOCSE
STA LOCSE
JMP IGNORE1
NOTL: NOP INSERT NEW COMMANDS HERE
IGNORE: LDA #$87 CTRL-G (BELL)
JSR OUT SEND BELL THROUGH MODEM; DO NOT ECHO
IGNORE1: JSR PICK
AND #$3F MAKE
ORA #$40 SCREEN
STA (BASL),Y FLASH
JMP DOIN
PICK: LDY $24 READS MY SCREEN
LDA (BASL),Y
RTS
SKP 2
*
* AMPERSAND ROUTINES USED BY ABBS
*
AND: JSR CHRGOT
PHA SAVE CODE
JSR CHRGET INCREMENT TXTPTR (NO OTHER REASON)
JSR GETNUM STORE MSG # IN LINNUM
STX TYPE FROM, TO, DATE, SUMMARY
LDX LINNUM+1
LDY LINNUM
BNE SKIPAND1
DEX
SKIPAND1: DEY
TXA
JSR GIVAYF A,Y -> FAC
LDY #N46
JSR MULT
JSR AYINT A$ ADDRESS NOW IN $A0 (H), $A1 (L) (FACMO,FACLO)
LDX TYPE
LDA LENGTH,X
STA LINNUM NOW HOLDS MAX LENGTH OF THIS TYPE
LDA OFFSET,X
CLC
ADC FACLO
STA SMPTR
LDA FACMO
ADC #$6B STRINGS START AT $6B00, END AT $83FF
STA SMPTR+1 (SMPTR) NOW ADDRESS OF SM$
PLA
CMP #$41 "A"
BEQ ASSIGNSM
CMP #$50 "P"
BEQ PRINTSM
CMP #$42 "B"
BEQ BSM
JMP TESTSM DEFAULT VALUE
*
N46: DFB $86,$34,0,0,0 THE NUMBER 45 IN PACKED FLOATING FORM
OFFSET: DFB 0,6,12,25 OFFSET INTO EACH MESSAGE SUMMARY
LENGTH: DFB 6,6,13,20 LENGTH OF EACH ITEM
PAD: DFB $20,$20,$20,$00 PAD WITH BLANKS OR NULLS
*
GETA: JSR CHKCOM
JSR FRMEVL
JSR CHKSTR
LDY #$00
LDA (FACMO),Y GET LENGTH
TAX
INY
LDA (FACMO),Y GET ADDR-L OF STRING
PHA
INY
LDA (FACMO),Y GET ADDR-H OF STRING
STA FACLO
PLA
STA FACMO
RTS
SKP 1
*
* &AJ,K,A$ WHERE J=MSG #, K=TYPE, A$=STRING TO STORE
*
ASSIGNSM: JSR GETA
LDY TYPE
LDA PAD,Y
LDY LINNUM MAX LENGTH FOR SM$
DEY
LOOPAND1: STA (SMPTR),Y
DEY
BPL LOOPAND1
TXA
TAY Y NOW LENGTH OF A$
LOOPAND2: DEY Y IS NOW LENGTH-1 OF STRING TO BE MOVED
CPY LINNUM MAXIMUM LENGTH
BGE LOOPAND2
LOOPAND3: LDA (FACMO),Y LOAD CHARACTER TO BE MOVED
STA (SMPTR),Y STORE IN SM$ MEMORY
DEY
BPL LOOPAND3
RTS END ASSIGNMENT
SKP 1
*
* &PJ,K WHERE J=MSG #, K=TYPE
*
PRINTSM: LDY #$00
LOOPPRT: LDA (SMPTR),Y
BEQ EXITPRT
JSR OUTDO
INY
CPY LINNUM
BNE LOOPPRT
EXITPRT: RTS
SKP 1
*
* &BJ,K B$=SM$ WHERE J=MSG #, K=TYPE
*
BSM: STA VARNAM "B"
LDA #$80
STA VARNAM+1
JSR PTRGET1
LDY #$00
LDA LINNUM LENGTH
STA (VARPNT),Y
INY
LDA SMPTR
STA (VARPNT),Y
INY
LDA SMPTR+1
STA (VARPNT),Y
RTS
*
* &TJ,K,A$,L WHERE J=MSG #, K=TYPE, A$=STRING TO TEST SM$ AGAINST, L=RESULT: 1:SM$>A$, 0:SM$=A$: -1:SM$ LEN(A$)
LDA (SMPTR),Y
BEQ OUT1
CMP (FACMO),Y
BEQ LOOPT1
BGE GT
BLT LT
OUT1: CPY TYPE LENGTH OF A$
BEQ EQ
BGE GT
LT: LDA #$FF SM$ < A$
BNE EXITT
GT: LDA #$01 SM$ > A$
BNE EXITT
EQ: LDA #$00 SM$ = A$
EXITT: JSR FLOAT
JSR CHKCOM
JSR PTRGET
JSR CHKNUM
TAX
JMP MOVMF
LST ON 1ST UNUSED BYTE
LST OFF
Text found in 090_Volume_90.dsk/ABBS3.txt:
SBTL 'ABBS PAGE 3 ROUTINES'
ORG $300
COUNT EQU $08 USED TO FIND USER OFFSET
LINNUM EQU $50 USED TO FIND USER OFFSET
VARTAB EQU $69 1ST BYTE OF VARIABLE TABLE
VARPNT EQU $83 ADDRESS OF VARIABLE
FACMO EQU $A0 USED IN FAC->INTEGER CONVERSIONS
TXTPTR EQU $B8
LINEMAX EQU $EC MAXIMUM LINE LENGTH
WAPTABLE EQU $8400 WAP NUMBERS BEGIN AT $8401=WAP001
GDBUFS EQU $D539 STORE 0 AT END OF INPUT BUFFER & MASK OFF ALL MSB'S
CHKSTR EQU $DD6C CHECKS FOR STRING
CHKNUM EQU $DD6A CHECKS FOR NUMBER
CHKCOM EQU $DEBE CHECKS FOR COMMA AT TXTPTR
PTRGET EQU $DFE3 FINDS VARIABLE AT TXTPTR
AYINT EQU $E10C CONVERTS FAC TO INTEGER
GIVAYF EQU $E2F2 FLOAT THE SIGNED INTEGER IN A,Y
COMBYTE EQU $E74C DOES CHKCOM & READS # INTO X FROM TXTPTR
MOVFM EQU $EAF9 MOVE (Y,A) INTO FAC
FLOAT EQU $EB93 FLOAT THE SIGNED INTEGER IN A
MOVMF EQU $EB2B MOVES FAC INTO (Y,X)
NXTCHAR EQU $FD75 GETS NEXT CHARACTER FOR INPUT LINE
*
* INLIN
*
LDY #$00
LDA (TXTPTR),Y
CMP #$2C ","
BNE SKIP0 TAKEN IF NO # IS GIVEN
JSR COMBYTE
STX LINEMAX
SKIP0: LDX #$00
JSR NXTCHAR
LDY #$02
TXA
STA (VARTAB),Y SAVE LENGTH
INY
LDA #$00
STA (VARTAB),Y
INY
LDA #$02
STA (VARTAB),Y
JMP GDBUFS
*
* USE 'CALL 804,A$,B$,J
* LOOK FOR 1ST CHARACTER OF A$ IN B$, RETURN WITH
* POSITION NUMBER IN J
*
JSR CHKCOM
JSR PTRGET FIND A$
JSR CHKSTR
LDY #$00
LDA (VARPNT),Y LENGTH
BNE SKIP1
LDA #' '
BNE SKIP2
SKIP1: INY NOW 1
LDA (VARPNT),Y
STA FACMO
INY NOW 2
LDA (VARPNT),Y
STA FACMO+1
LDY #$00
LDA (FACMO),Y
SKIP2: PHA SAVE 1ST CHARACTER OF A$
JSR CHKCOM
JSR PTRGET FIND B$
JSR CHKSTR
LDY #$00
LDA (VARPNT),Y
TAX LENGTH
INY
LDA (VARPNT),Y
STA FACMO
INY
LDA (VARPNT),Y
STA FACMO+1
TXA LENGTH
TAY
PLA RESTORE 1ST CHAR OF A$
LOOP1: DEY
CPY #$FF
BEQ EXIT1
CMP (FACMO),Y LOOK IN B$
BNE LOOP1
EXIT1: INY
TYA
JSR FLOAT
JSR CHKCOM
JSR PTRGET FIND J
JSR CHKNUM
TAX
JMP MOVMF
*
* FIND USER #
* 'CALL 892,J' WHERE J IS USER #; RETURNS J AS RECORD #
*
JSR CHKCOM
JSR PTRGET FIND VARIABLE AFTER COMMA
JSR MOVFM MOVE VALUE TO FAC
JSR AYINT CONVERT TO INTEGER
LDA FACMO
CMP #$10 REJECT WAP #'S >=4096
BGE SKIP7 (BCS)
ADC #WAPTABLE/256 USERS.OBJ STARTS AT $8400
STA LINNUM+1 LINNUM NOW HOLDS LOCATION
LDA FACMO+1 OF USER'S BYTE
STA LINNUM
LDY #$00
STY COUNT COUNT WILL BE RECORD OFFSET
STY COUNT+1 INTO USERS FILE
LDA (LINNUM),Y
BEQ SKIP7 TAKEN IF USER IS NOT ON SYSTEM
BNE SKIP4
LOOP2: LDA (LINNUM),Y IS THAT USER ON THE SYSTEM?
BEQ SKIP5 TAKEN IF HE'S NOT
SKIP4: INC COUNT
BNE SKIP5
INC COUNT+1
SKIP5: LDA LINNUM DECREMENT LINNUM
BNE SKIP6
DEC LINNUM+1
SKIP6: DEC LINNUM
BNE LOOP2 TAKEN IF LINNUM IS NOT AT PAGE CROSSING
LDA LINNUM+1
CMP #WAPTABLE/256 PAGE $84
BNE LOOP2 TAKEN IF NOT THROUGH WITH CHECK
SKIP7: LDA COUNT+1
LDY COUNT
JSR GIVAYF CONVERT COUNT TO FAC
LDY VARPNT+1 GET ADDRESS OF VARIABLE TO MOVE
LDX VARPNT FAC INTO
JMP MOVMF MOVE FAC INTO VARIABLE
LST ON FIRST UNUSED BYTE
LST OFF
Text found in 090_Volume_90.dsk/BUILD USERS.OBJ.bas:
10 HIMEM: 8 *4096 +4 *256:A$ = " ":D$ = CHR$(4):F$ = "USERS":F1$ = "USERS.OBJ": REM HIMEM MUST = START OF WAP'S #'S
20 FOR J = 768 TO 790: READ K: POKE J,K: NEXT : DATA 162,0,32,117,253,160,2,138,145,105,200,169,0,145,105,200,169,2,145,105,76,57,213
32 GOTO 100
33 TEXT : HOME : POKE 33,33: RETURN
100 PRINT D$;"OPEN";F$;",D1": PRINT D$"READ"F$:N = PEEK(116) *256 + PEEK(115):W = N: FOR J = N TO N +4096: POKE J,0: NEXT
110 CALL 768: IF LEN(A$) = 0 THEN 1000
120 J = VAL( MID$ (A$,1,4)): PRINT J
130 POKE J +W,255
140 IF J < = J1 THEN PRINT CHR$(7)"OUT OF NUMERIC ORDER"
150 J1 = J
200 GOTO 110
999 END
1000 PRINT D$;"CLOSE": PRINT D$;"BSAVE";F1$;",A$8400,L$1000"
1010 PRINT D$;"RUN WAPABBS"
Text found in 090_Volume_90.dsk/INSTRUCTIONS.txt:
INFORMATION ON THIS ABBS
TO TEMPORARILY STOP THIS (OR ANY OTHER
LISTING), TYPE CTRL-S. TYPE ANY OTHER
CHARACTER TO RESUME. TO GO BACK TO
THE COMMAND PROMPT, TYPE CTRL-C OR
CTRL-K.
THIS ABBS ALLOWS YOU TO ENTER AND
RETRIEVE MESSAGES, FIND OUT INFORMA-
TION BY LISTING FILES, AND SEND AND
RECEIVE PROGRAMS TO AND FROM THE ABBS.
THE ABBS USES YOUR W.A.P. NUMBER
(WAPXXX OR WPXXXX) TO KEEP TRACK OF
SENDERS AND RECIPIENTS OF MESSAGES.
MESSAGES ARE REFERENCED BY AN ARBI-
TRARY NUMBER (1-138) BUT YOU CAN USE
THE S (SUMMARY) AND L (LIST MULTIPLE
MESSAGES) COMMANDS TO REVIEW THEM IN
CHRONOLOGICAL ORDER WITHIN A SPECIFIED
NUMBER OF DAYS.
MESSAGES:
ENTERING A MESSAGE:
YOU WILL BE ASKED TO GIVE THE WAP
NUMBER OF THE PERSON TO WHOM THE MES-
SAGE IS INTENDED. FOR MESSAGES TO
EVERYONE, USE "ALL". YOU THEN ENTER
A 20-CHARACTER SUMMARY OF THE SUBJECT
OF THE MESSAGE. YOU CAN THEN ENTER UP
TO 10 LINES OF UP TO 39 CHARACTERS
EACH. YOU CAN FIND A PERSON'S WAP
NUMBER WITH THE "W" (WHO) COMMAND. IF
SOMEONE HAS SENT A YOU A MESSAGE,
THEIR NUMBER WILL BE IN THE MESSAGE
HEADER ("FROM WAPXXX"). THE ABBS
WILL KEEP YOUR LINES TO LESS THAN 40
CHARACTERS. USE BACKSPACE (LEFT-
ARROW), RIGHT-ARROW (CTRL-U) AND
CTRL-X AS YOU NORMALLY DO. YOUR MES-
SAGE CAN ONLY BE 10 LINES LONG. IF
YOU DON'T NEED 10 LINES, JUST ENTER A
RETURN WHEN YOU ARE THROUGH. THEN THE
ABBS WILL ASK IF YOU WANT TO EDIT THE
MESSAGE OR SAVE IT AS IS. IF YOU DO
NOT SAVE IT, YOU CAN USE THE EDIT COM-
MANDS (SEE "A" BELOW) TO MAKE CHANGES.
TO EXIT MESSAGE ENTRY, USE "CANCEL".
RETRIEVING A MESSAGE:
THERE ARE THREE WAYS TO RETRIEVE
MESSAGES: "L" WILL LIST ALL MESSAGES
WITHIN A SPECIFIED NUMBER OF DAYS; EN-
TERING JUST A MESSAGE NUMBER WILL RE-
TRIEVE THAT MESSAGE.
AFTER YOU HAVE READ A MESSAGE
SENT ONLY TO YOU, YOU WILL BE ASKED
WHETHER YOU WANT TO DELETE THE MES-
SAGE. UNLESS YOU MUST KEEP IT ON THE
SYSTEM FOR SOME REASON, PLEASE DELETE
IT TO FREE UP THE SPACE FOR ANOTHER
MESSAGE. ALSO, DELETING IT WILL TELL
THE SENDER THAT YOU HAVE READ THE MES-
SAGE. ONLY THE YOU, THE SENDER AND
THE SYSOP CAN DELETE A MESSAGE TO YOU,
AND I ONLY DO SO AFTER IT HAS BEEN ON
THE SYSTEM FOR MORE THAN A MONTH.
MESSAGE SUMMARIES:
SUMMARIES CAN BE OBTAINED WITH
EITHER THE "Q" COMMAND OR THE "S" COM-
MAND.
THE "Q" COMMAND WILL GIVE YOU THE
MESSAGE NUMBERS OF MESSAGES SENT TO
YOU, TO ALL, AND FROM YOU. WHEN YOU
SIGN ON, THE ABBS ALSO LISTS THE
NUMBERS OF MESSAGES SENT TO YOU.
THE "S" COMMAND ASKS YOU HOW FAR
BACK YOU WISH TO SEARCH, AND WHETHER
YOU WISH TO FLAG MESSAGES FOR LATER
READING IN FULL. THE SUMMARY WILL
LIST THE SENDER, THE RECIPIENT, THE
DATE THE MESSAGE WAS SENT, AND THE
SUBJECT OF THE MESSAGE.
DELETING A MESSAGE:
THE "D" COMMAND WILL LIST THE
SUMMARY OF THE MESSAGE AND ASK YOU
IF YOU WANT TO DELETE IT. ONLY THE
SENDER, THE RECIPIENT (IF NOT TO ALL)
AND THE SYSOP CAN DELETE MESSAGES. SO
THAT EVERYONE CAN USE THE ABBS, PLEASE
DELETE YOUR OLD MESSAGES!!
AMENDING A MESSAGE:
THE "A" COMMAND AND THE EDIT OP-
TION OF THE "E" COMMAND ALLOW YOU TO
CHANGE THE RECIPIENT, SUMMARY OR TEXT
OF A MESSAGE. IF THE MESSAGE HAS
FEWER THAN 10 LINES, YOU MAY ADD A
LINE. YOU CAN'T DELETE A LINE, BUT
REPLACING IT WITH 1 OR 2 SPACES WILL
HAVE THE SAME EFFECT.
INFORMATIONAL PRINTOUTS:
THE "H" COMMAND GIVES A SHORT
DESCRIPTION OF ALL AVAILABLE COMMANDS
AND CONTROL CHARACTERS. NEW USERS MAY
WANT TO MAKE A PRINTOUT OF THIS LIST
FOR HANDY REFERENCE. (IF YOUR PRINTER
IS TOO SLOW, SEE THE "N" COMMAND,
EXPLAINED BELOW.)
THE "?" COMMAND LISTS ONLY THE
LETTERS OF ALLOWED COMMANDS, AND IS
FOR QUICK REFERENCE.
THE "B" COMMAND LISTS OTHER COM-
PUTER BULLETIN BOARD SYSTEMS. IF YOU
KNOW OF ANY CHANGES THAT SHOULD BE
MADE -- AND CHANGES OCCUR FREQUENTLY
AS SYSTEMS START UP OR SHUT DOWN --
PLEASE LEAVE THE SYSOP A MESSAGE.
THE "P" COMMAND WILL PRINT OUT
THE BULLETIN THAT YOU WERE GIVEN THE
OPTION OF SEEING WHEN YOU SIGNED ON.
IT ALSO PRINTS OUT THE LIST OF MES-
SAGES FOR YOU.
THE "M" COMMAND LISTS THE MEETING
DATES, TIMES AND LOCATIONS OF ALL
MEETINGS OF WASHINGTON APPLE PI AND
THE NORTHERN VIRGINIA APPLE USERS
GROUP, NOVAPPLE. ALSO LISTED IS IN-
FORMATION ON MEETINGS OF W.A.P.'S
SPECIAL INTEREST GROUPS, KNOWN BY THE
ABBREVIATION "SIG", AND TUTORIALS,
CLASSES ON SPECIAL SUBJECTS FOR WAP
MEMBERS.
THE "$" COMMAND LISTS THE CURRENT
ITEMS AND PRICES OF ITEMS OFFERED FOR
SALE THROUGH THE CLUB STORE. THESE
PRICES ARE NOT OFFICIAL, AS THIS IS
NOT A COMMERCIAL BULLETIN BOARD.
POTENTIAL CUSTOMERS SHOULD CALL THE
CLUB STORE FOR FURTHER, DEFINITIVE
INFORMATION.
THE "O" COMMAND IS A USERS' OPIN-
ION POLL. THIS IS AN IMPORTANT FEED-
BACK DEVICE FOR THE SYSOP AND FOR THE
CLUB. QUESTIONS ARE CHANGED WEEKLY.
PLEASE GIVE EVERYONE THE BENEFIT OF
YOUR OPINION!
THE "I" COMMAND LISTS THIS INFOR-
MATION ABOUT THE ABBS.
HOUSEKEEPING COMMANDS:
LINEFEEDS AND NULLS:
IF AT ANY TIME YOU SEND THE ABBS
A LINEFEED, THE ABBS WILL BEGIN TO
SEND YOU LINEFEEDS. IF YOUR COMPUTER
SENDS A LINEFEED AFTER CARRIAGE RE-
TURNS, THE FIRST "ENTER A CARRIAGE
RETURN" SHOULD ENABLE LINEFEED INSER-
TION. (LINEFEEDS ARE NEEDED BY CP/M
SYSTEMS AND SOME PRINTING TERMINALS.)
YOU CAN USE THE "N" COMMAND TO TURN
LINEFEED INSERTION ON OR OFF.
NULLS ARE THE ABBS' WAY OF ALLOW-
ING YOUR PRINTER TO KEEP UP WITH THE
ABBS. CRT'S AND SOME PRINTERS DON'T
NEED THEM. IF YOU DO NEED THEM, THE
"N" COMMAND WILL TELL YOU THE CURRENT
DELAY AFTER CARRIAGE RETURNS, WHICH
CAN BE 0-2.55 SECONDS, AND SPEED. BE-
CAUSE NORMAL TRANSMISSION IS ONLY AT
30 CHARACTERS/SECOND, ONLY SPEEDS OF
100 OR LESS HAVE ANY EFFECT. "SPEED="
IS IN EFFECT AT ALL TIMES REGARDLESS
OF WHETHER LINEFEED INSERTION IS ON.
"SPEED=" IS JUST APPLESOFT'S "SPEED="
COMMAND.
KNOWLEDGABLE USER:
WHEN YOU KNOW THE WORKINGS OF THE
ABBS WELL, YOU CAN USE THE "K" COMMAND
TO ELIMINATE SOME OF THE PROMPTS.
THIS WILL SPEED UP OPERATIONS SOME.
TO TURN IT OFF, ENTER "K" AGAIN.
80-COLUMN MODE:
IF YOU ARE USING A PRINTER OR 80-
COLUMN BOARD, YOU CAN CHANGE EVERY
OTHER CARRIAGE RETURN INTO A SPACE
WITH THE "+" COMMAND. TO TURN IT OFF,
ENTER "+" AGAIN.
USERS AND WAP NUMBERS:
THE "W" (WHO) COMMAND ALLOWS YOU
TO FIND A PERSON'S WAP NUMBER IF YOU
KNOW THE FIRST TWO LETTERS OF THE PER-
SON'S LAST NAME, AND TO FIND HIS OR
HER NAME IF YOU KNOW HIS OR HER WAP
NUMBER.
LOWER CASE:
USE CTRL-L LIKE A SHIFT-LOCK KEY
TO TOGGLE OFF OR ON LOWER-CASE TRANS-
LATION. IF YOU WANT TO SEE LOWER
CASE, ENTER CTRL-L ANY TIME THE ABBS
EXPECTS INPUT. ENTERING CTRL-L AGAIN
MAKES ALL LOWER CASE INTO UPPER CASE.
ONLY THE SUBJECT AND TEXT OF MESSAGES
CAN BE MADE LOWER CASE; EVERYTHING
ELSE WILL ALWAYS BE UPPER CASE.
CHATTING WITH THE SYSOP:
OCCASIONALLY, I WILL BE ABLE TO
CHAT WITH YOU. TO SEE IF I AM AVAIL-
ABLE, ENTER "C". IF I AM LISTED AS
"NOT AVAILABLE", IT DOES NOT MEAN THAT
I AM NOT PHYSICALLY HERE, IT MEANS
ONLY THAT I AM OTHERWISE OCCUPIED WITH
MY MUNDANE EXISTENCE (EATING, SLEEP-
ING, DOING CHORES, ETC.) IF I AM
LISTED AS AVAILABLE, YOU CAN RING ME.
CONTINUE USING THE ABBS, AND WHEN I
COME TO THE KEYBOARD, I WILL BREAK IN
FOR A FRIENDLY CHAT ABOUT WHATEVER
INTERESTS US.
FILE TRANSFER SYSTEMS:
THE "X" COMMAND ENTERS A FILE
TRANSFER SUBSYSTEM. IT HAS A SEP-
ARATE HELP COMMAND.
GENERAL INFORMATION:
THIS SYSTEM RUNS ON AN APPLE II
IN APPLESOFT AND ASSEMBLY LANGUAGE
USING A D.C. HAYES MICROMODEM II UNDER
A PROGRAM WRITTEN BY THOMAS S. WARRICK
(BASED ON SOME EARLIER WORK DONE BY
JOHN MOON) FOR WASHINGTON APPLE PI,
THE WORLD'S SECOND LARGEST APPLE COM-
PUTER USERS' GROUP.
YOUR CURRENT SYSOP IS: (INSERT
YOUR NAME)
THE POLICY OF THIS ABBS PROHIBITS
COMMERCIAL MESSAGES. "COMMERCIAL"
MEANS ANY OFFER OR SOLICITATION OF AN
OFFER FOR A PRODUCT OR SERVICE BY ANY-
ONE IN THE TRADE OR BUSINESS OF SEL-
LING THAT PRODUCT OR SERVICE. CASUAL
SALES OF PERSONAL PROPERTY ARE PERMIT-
TED. THESE RULES SHOULD NOT BE CIR-
CUMVENTED THROUGH THE ACTIVITY OF
OTHERS.
EXCEPT FOR CONTROL CHARACTERS C,
H (BACKSPACE), K, L, M (RETURN), S,
AND U (RIGHT-ARROW), ALL CONTROL CHAR-
ACTERS ARE IGNORED. (THIS MEANS NO
"BEEPS".)
I WELCOME ALL YOUR COMMENTS AND
SUGGESTIONS. MANY OF THEM WILL BE
ACTED ON AS SOON AS THEY CAN BE IN-
CORPORATED INTO THE PROGRAM. MANY
OF THE MOST USEFUL FEATURES IN THE
SYSTEM WERE SUGGESTED BY USERS.
ARTICLES EXPLAINING THE ABBS AP-
PEARED IN THE JULY AND AUGUST 1982
ISSUES OF WASHINGTON APPLE PI MAG-
AZINE.
ENJOY!
(YOUR NAME)
SYSOP
Text found in 090_Volume_90.dsk/OPINION.txt:
WHAT DO YOU THINK OF THIS ABBS?
Text found in 090_Volume_90.dsk/REM II INSTRUCTIONS.txt:
CALL-151
1901: 20 84 FE 20 2F FB 20
1908: 58 FC A2 08 20 4A F9 20
1910: E1 2A 13 18 0D 0D 56 45
1918: 52 53 49 4F 4E 20 33 2E
1920: 32 0D 0D 13 49 53 20 41
1928: 20 4D 45 4E 55 2D 44 52
1930: 49 56 45 4E 20 54 45 52
1938: 4D 49 4E 41 4C 0D 1A 2E
1940: 20 20 59 4F 55 20 57 49
1948: 4C 4C 20 4E 45 45 44 20
1950: 41 4E 20 14 49 49 20 4F
1958: 52 0D 14 49 49 2B 20 57
1960: 49 54 48 20 41 54 20 4C
1968: 45 41 53 54 20 33 32 4B
1970: 20 4F 46 20 0F 08 AC 20
1978: E1 2A 0D 41 20 54 56 20
1980: 4F 52 20 4D 4F 4E 49 54
1988: 4F 52 2C 20 4F 4E 45 20
1990: 44 49 53 4B 20 44 52 49
1998: 56 45 20 57 49 54 48 0D
19A0: 44 4F 53 20 33 2E 33 20
19A8: 41 4E 44 20 41 20 44 2E
19B0: 43 2E 20 48 41 59 45 53
19B8: 20 4D 49 43 52 4F 11 49
19C0: 49 2E 0D 41 20 0E 49 53
19C8: 20 4F 50 54 49 4F 4E 41
19D0: 4C 2E 20 20 50 45 52 49
19D8: 50 48 45 52 41 4C 53 0D
19E0: 54 48 41 54 20 55 53 45
19E8: 20 1B 20 49 2F 4F 20 48
19F0: 4F 4F 4B 53 20 28 24 33
19F8: 36 2D 24 33 39 29 20 50
1A00: 52 4F 42 2D 0D 41 42 4C
1A08: 59 20 57 49 4C 4C 20 4E
1A10: 4F 54 20 57 4F 52 4B 2E
1A18: 8D 20 E1 2A 13 42 45 47
1A20: 49 4E 53 20 41 54 20 24
1A28: 38 30 33 20 28 44 45 43
1A30: 49 4D 41 4C 0D 32 30 35
1A38: 31 29 2C 20 41 4E 44 20
1A40: 4D 41 59 20 42 45 20 52
1A48: 45 2D 45 4E 54 45 52 45
1A50: 44 20 55 53 49 4E 47 0D
1A58: 27 43 41 4C 4C 20 32 30
1A60: 35 31 27 20 46 52 4F 4D
1A68: 20 45 49 1B 52 20 42 41
1A70: 53 49 43 20 4F 52 20 27
1A78: 38 30 33 47 27 0D 46 52
1A80: 4F 4D 20 1B 20 4D 4F 4E
1A88: 49 54 4F 52 2E 8D 20 8A
1A90: 2A 55 4E 54 49 4C 20 54
1A98: 4F 4C 44 20 4F 1B 52 57
1AA0: 49 53 45 2C 20 13 57 49
1AA8: 4C 4C 0D 41 53 53 55 4D
1AB0: 45 20 54 48 41 54 20 59
1AB8: 4F 55 52 20 11 49 53 20
1AC0: 49 4E 20 53 4C 4F 54 20
1AC8: 33 20 41 4E 44 0D 59 4F
1AD0: 55 52 20 0E 49 53 20 49
1AD8: 4E 20 53 4C 4F 54 20 31
1AE0: 2E 20 20 1B 53 45 20 4D
1AE8: 41 59 0D 42 45 1C 08 44
1AF0: 20 42 59 20 50 4F 4B 49
1AF8: 4E 47 20 54 48 45 20 53
1B00: 4C 4F 54 20 4E 55 4D 42
1B08: 45 52 53 0D 49 4E 20 1B
1B10: 20 42 59 54 45 53 20 49
1B18: 4E 44 49 43 41 54 45 44
1B20: 20 4F 4E 20 1B 20 53 54
1B28: 41 54 55 53 0D 52 45 50
1B30: 4F 52 54 2E 20 20 54 4F
1B38: 1C 1B 53 45 2C 20 42 4C
1B40: 4F 41 44 0D 13 41 4E 44
1B48: 1C 1B 20 49 4E 44 49 43
1B50: 41 54 45 44 8D 20 E1 2A
1B58: 42 59 54 45 53 20 57 49
1B60: 54 48 4F 55 54 20 52 55
1B68: 4E 4E 49 4E 47 20 1B 20
1B70: 1A 2C 20 1B 4E 0D 52 45
1B78: 15 20 13 57 49 54 48 3A
1B80: 0D 20 20 20 20 20 42 15
1B88: 20 52 45 4D 45 4D 42 45
1B90: 52 20 49 49 2C 41 24 38
1B98: 30 33 2C 4C 24 31 30 46
1BA0: 44 0D 13 48 41 53 20 31
1BA8: 36 20 46 55 4E 43 54 49
1BB0: 4F 4E 53 3A 0D 41 2E 20
1BB8: 20 12 20 49 53 20 1B 20
1BC0: 4D 49 43 52 4F 11 08 27
1BC8: 53 0D 53 54 41 4E 44 41
1BD0: 52 44 20 12 2E 20 20 59
1BD8: 4F 55 20 45 58 49 54 20
1BE0: 49 54 20 49 4E 8D 20 E1
1BE8: 2A 1B 20 4E 4F 52 4D 41
1BF0: 4C 20 57 41 59 20 57 49
1BF8: 54 48 20 3C 43 54 52 4C
1C00: 2D 41 3E 20 3C 43 54 52
1C08: 4C 2D 58 3E 2E 0D 59 4F
1C10: 55 20 4D 55 53 54 20 1B
1C18: 4E 20 50 52 45 53 53 20
1C20: 41 20 4B 45 59 20 54 4F
1C28: 20 52 45 10 20 54 CF 20
1C30: E1 2A 0D 1B 20 4D 41 49
1C38: 4E 20 4D 45 4E 55 2E 20
1C40: 20 54 4F 20 50 52 49 4E
1C48: 54 20 1B 20 43 4F 4E 54
1C50: 45 4E 54 53 0D 4F 46 20
1C58: 1B 20 54 45 58 54 20 53
1C60: 43 52 45 45 4E 2C 20 54
1C68: 59 50 45 20 43 54 52 4C
1C70: 2D 50 2E 20 20 4E 4F 0D
1C78: 1D 57 49 4C 4C 20 42 45
1C80: 20 15 44 20 49 4E 20 1B
1C88: 20 0F 0D 4F 52 20 50 52
1C90: 49 4E 54 45 44 20 54 4F
1C98: 20 59 4F 55 52 20 0E 57
1CA0: 48 49 4C 45 20 59 4F 55
1CA8: 0D 4C 4F 4F 4B 20 41 54
1CB0: 20 41 4E 59 20 4D 45 4E
1CB8: 55 2E 8D 20 8A 2A 42 2E
1CC0: 20 20 44 49 41 4C 20 50
1CC8: 48 4F 4E 45 20 4E 55 4D
1CD0: 42 45 52 20 26 20 47 4F
1CD8: 20 54 4F 20 54 45 52 4D
1CE0: 49 4E 41 4C 0D 4D 4F 44
1CE8: 45 20 57 49 4C 4C 20 41
1CF0: 53 4B 20 59 4F 55 20 46
1CF8: 4F 52 20 1B 20 50 48 4F
1D00: 4E 45 20 4E 55 4D 42 45
1D08: 52 0D 59 4F 55 20 57 49
1D10: 53 48 20 54 4F 20 44 49
1D18: 41 4C 2E 20 20 59 4F 55
1D20: 20 4D 41 59 20 55 53 45
1D28: 20 53 54 41 4E 44 41 52
1D30: 44 0D 14 49 4E 50 55 54
1D38: 20 45 44 49 54 49 4E 47
1D40: 20 46 45 41 54 55 52 45
1D48: 53 20 53 55 43 48 20 41
1D50: 53 0D 1B 20 4C 45 46 54
1D58: 2D 41 52 52 4F 57 3B 20
1D60: 1B 20 4C 49 4E 45 20 57
1D68: 49 4C 4C 20 4E 4F 54 20
1D70: 42 45 0D 53 45 4E 54 20
1D78: 54 4F 20 1B 20 11 08 27
1D80: 53 20 44 49 41 4C 45 52
1D88: 20 55 4E 54 49 4C 20 59
1D90: 4F 55 8D 20 E1 2A 48 49
1D98: 54 20 52 45 10 2E 20 20
1DA0: 59 4F 55 20 57 49 4C 4C
1DA8: 20 1B 4E 20 42 45 20 50
1DB0: 4C 41 43 45 44 0D 49 4E
1DB8: 20 12 2E 0D 43 2E 20 20
1DC0: 41 4E 53 57 45 52 20 50
1DC8: 48 4F 4E 45 20 26 20 47
1DD0: 4F 20 54 4F 20 12 0D 57
1DD8: 41 49 54 53 20 46 4F 52
1DE0: 20 1B 20 50 48 4F 4E 45
1DE8: 20 54 4F 20 52 49 4E 47
1DF0: 2C 20 41 4E 53 57 45 52
1DF8: 53 20 49 54 0D 41 4E 44
1E00: 20 54 48 52 4F 57 53 20
1E08: 59 4F 55 20 49 4E 54 4F
1E10: 20 12 2E 0D 44 2E 20 20
1E18: 48 41 4E 47 20 55 50 20
1E20: 50 48 4F 4E 45 20 44 4F
1E28: 45 53 20 4A 55 53 54 20
1E30: 54 48 41 54 2E 8D 20 E1
1E38: 2A 45 2E 20 20 0F 4F 4E
1E40: 20 10 53 20 4F 4E 20 1B
1E48: 20 0F 08 2E 20 20 49 46
1E50: 0D 49 54 20 49 53 20 4F
1E58: 4E 2C 20 1B 20 57 4F 52
1E60: 44 20 27 4F 4E 27 20 57
1E68: 49 4C 4C 20 41 50 50 45
1E70: 41 52 20 49 4E 0D 49 4E
1E78: 56 45 52 53 45 2E 20 20
1E80: 1B 20 0F 4E 4F 52 4D 41
1E88: 4C 4C 59 20 42 45 47 49
1E90: 4E 53 20 41 54 0D 24 31
1E98: 39 30 31 20 28 44 45 43
1EA0: 49 4D 41 4C 20 36 34 30
1EA8: 31 29 20 41 4E 44 20 45
1EB0: 4E 44 53 20 41 54 20 48
1EB8: 49 4D 45 4D 2E 0D 57 48
1EC0: 45 4E 20 1B 20 0F 49 53
1EC8: 20 4F 4E 2C 20 3E 3E 20
1ED0: 41 4C 4C 20 3C 3C 20 43
1ED8: 48 41 52 2D 0D 41 43 54
1EE0: 45 52 53 20 57 49 4C 4C
1EE8: 20 42 45 20 53 54 4F 52
1EF0: 45 44 20 49 4E 20 1B 20
1EF8: 0F 08 2E 8D 20 E1 2A 1D
1F00: 1F 41 52 45 20 27 45 52
1F08: 41 53 45 44 27 0D 55 4E
1F10: 4C 45 53 53 20 1B 20 1A
1F18: 20 49 53 20 54 4F 4C 44
1F20: 20 4F 1B 52 57 49 53 45
1F28: 2E 8D 20 8A 2A 46 2E 20
1F30: 20 0F 4F 46 46 20 10 53
1F38: 20 1B 20 0F 4F 46 46 2E
1F40: 0D 49 46 20 1B 20 0F 49
1F48: 53 20 4F 46 46 2C 20 1B
1F50: 20 57 4F 52 44 20 27 4F
1F58: 46 46 27 0D 41 50 50 45
1F60: 41 52 53 20 49 4E 20 49
1F68: 4E 56 45 52 53 45 2E 0D
1F70: 47 2E 20 20 44 49 53 50
1F78: 4C 41 59 20 0F 4C 49 53
1F80: 54 53 20 1B 20 43 4F 4E
1F88: 54 45 4E 54 53 0D 4F 46
1F90: 20 1B 20 0F 4F 4E 20 1B
1F98: 20 54 45 58 54 20 53 43
1FA0: 52 45 45 4E AE 20 E1 2A
1FA8: 0D 43 54 52 4C 2D 43 20
1FB0: 57 49 4C 4C 20 53 54 4F
1FB8: 50 20 1B 20 4C 49 53 54
1FC0: 49 4E 47 2E 20 20 49 46
1FC8: 20 59 4F 55 0D 48 41 56
1FD0: 45 20 41 55 54 4F 53 54
1FD8: 41 52 54 20 52 4F 4D 2C
1FE0: 20 43 54 52 4C 2D 53 20
1FE8: 57 49 4C 4C 20 54 45 4D
1FF0: 50 4F 2D 0D 52 41 52 49
1FF8: 4C 59 20 48 41 4C 54 20
2000: 1B 20 4C 49 53 54 49 4E
2008: 47 2E 20 20 42 45 20 41
2010: 4C 45 52 54 20 42 45 2D
2018: 0D 43 41 55 53 45 20 1B
2020: 20 0F 47 4F 45 53 20 42
2028: 59 20 46 41 53 54 21 0D
2030: 48 2E 20 20 45 4E 54 45
2038: 52 20 54 45 58 54 20 49
2040: 4E 54 4F 20 0F 41 44 44
2048: 53 20 57 48 41 54 AD 20
2050: E1 2A 0D 45 56 45 52 20
2058: 59 4F 55 20 54 59 50 45
2060: 20 54 4F 20 1B 20 0F 08
2068: 2E 20 20 59 4F 55 20 43
2070: 41 4E 0D 43 52 45 41 54
2078: 45 20 54 45 58 54 20 54
2080: 4F 20 42 45 20 54 52 41
2088: 4E 53 4D 49 54 54 45 44
2090: 20 4F 52 20 54 4F 20 42
2098: 45 0D 53 41 56 45 44 20
20A0: 54 4F 20 44 49 53 4B 0D
20A8: 49 2E 20 20 43 4C 45 41
20B0: 52 20 0F 45 52 41 53 45
20B8: 53 20 1B 20 0F 08 2E 0D
20C0: 53 45 4E 44 49 4E 47 20
20C8: 41 20 16 20 4F 56 45 52
20D0: 20 1B 20 11 4F 52 20 4C
20D8: 49 53 54 AD 20 E1 2A 0D
20E0: 49 4E 47 20 1B 53 45 20
20E8: 18 41 4C 53 4F 20 45 52
20F0: 41 53 45 53 20 1B 0D 0F
20F8: 08 2E 8D 20 8A 2A 4A 2E
2100: 20 20 15 20 0F 54 4F 20
2108: 44 49 53 4B 20 41 4C 4C
2110: 4F 57 53 20 59 4F 55 20
2118: 54 4F 0D 15 20 1B 20 0F
2120: 41 53 20 41 20 53 54 41
2128: 4E 44 41 52 44 20 44 4F
2130: 53 20 54 45 58 54 0D 16
2138: 2C 20 41 53 20 41 20 16
2140: 20 46 4F 52 20 1B 20 19
2148: 0D 57 4F 52 44 20 50 52
2150: 4F 43 45 53 53 4F 52 20
2158: 4F 52 20 41 53 20 41 20
2160: 17 16 20 57 49 54 48 0D
2168: 41 4C 4C 20 1D 42 15 44
2170: 20 49 4E 20 1B 49 52 20
2178: 41 53 43 49 49 8D 20 E1
2180: 2A 46 4F 52 4D 2E 20 20
2188: 4E 4F 54 45 20 54 48 41
2190: 54 20 41 20 44 49 53 4B
2198: 20 45 52 52 4F 52 20 4D
21A0: 41 4B 45 53 20 59 4F 55
21A8: 0D 45 58 49 54 20 1B 20
21B0: 1A 2E 20 20 52 45 2D 45
21B8: 4E 54 45 52 20 57 49 54
21C0: 48 20 27 43 41 4C 4C 0D
21C8: 32 30 35 31 27 2E 20 20
21D0: 59 4F 55 20 4D 41 59 20
21D8: 41 4C 53 4F 20 15 20 1B
21E0: 20 0F 0D 42 59 20 50 52
21E8: 49 4E 54 49 4E 47 20 49
21F0: 54 2E 8D 20 E1 2A 4B 2E
21F8: 20 20 53 45 4E 44 20 16
2200: 20 41 4C 4C 4F 57 53 20
2208: 59 4F 55 20 54 4F 20 4C
2210: 4F 41 44 20 41 20 54 45
2218: 58 54 0D 16 2C 20 19 16
2220: 20 4F 52 20 17 0D 16 2E
2228: 20 20 59 4F 55 20 4D 41
2230: 59 20 41 4C 53 4F 20 54
2238: 52 41 4E 53 4D 49 54 20
2240: 1B 20 0F 08 0D 41 53 20
2248: 41 53 43 49 49 20 1D 4F
2250: 52 20 41 53 20 41 20 53
2258: 45 52 49 45 53 20 4F 46
2260: 0D 48 45 58 41 44 45 43
2268: 49 4D 41 4C 20 1D 46 4F
2270: 52 20 44 49 52 45 43 54
2278: 20 45 4E 54 52 59 0D 54
2280: 4F 20 41 4E 4F 54 48 45
2288: 52 20 43 4F 4D 50 55 54
2290: 45 52 2C 20 4F 52 20 59
2298: 4F 55 20 4D 41 59 20 54
22A0: 52 41 4E 53 2D 0D 4D 49
22A8: 54 20 41 20 4C 49 53 54
22B0: 49 4E 47 20 4F 46 20 41
22B8: 20 42 41 53 49 43 20 1A
22C0: 2E 20 20 59 4F 55 8D 20
22C8: E1 2A 43 41 4E 20 55 53
22D0: 45 20 1B 20 53 45 4E 44
22D8: 20 41 4E 44 20 15 20 43
22E0: 4F 4D 4D 41 4E 44 53 20
22E8: 54 4F 0D 43 4F 4E 56 45
22F0: 52 54 20 16 53 20 46 52
22F8: 4F 4D 20 54 45 58 54 20
2300: 54 4F 20 17 0D 28 41 53
2308: 43 49 49 29 20 54 4F 20
2310: 19 16 53 2E 20 20 4C 4F
2318: 41 44 0D 1B 20 16 20 59
2320: 4F 55 20 57 41 4E 54 20
2328: 54 4F 20 43 4F 4E 56 45
2330: 52 54 2C 20 1B 4E 0D 27
2338: 53 41 56 45 27 20 49 54
2340: 20 49 4E 20 1B 20 46 4F
2348: 52 4D 20 59 4F 55 20 44
2350: 45 53 49 52 45 2E 8D 20
2358: 8A 2A 4C 2E 20 20 18 4C
2360: 49 53 54 53 20 54 48 49
2368: 53 20 16 2E 20 20 49 54
2370: 0D 41 4C 53 4F 20 45 52
2378: 41 53 45 53 20 1B 20 0F
2380: 08 2E 20 20 54 4F 20 4D
2388: 41 4B 45 20 41 0D 50 52
2390: 49 4E 54 45 44 20 43 4F
2398: 50 59 20 4F 46 20 1B 53
23A0: 45 20 18 08 2C 0D 45 58
23A8: 49 54 20 13 08 2C 20 10
23B0: 20 4F 4E 20 59 4F 55 52
23B8: 0D 0E 41 4E 44 20 27 42
23C0: 52 55 4E 20 52 45 4D 20
23C8: 49 49 2E 4F 42 4A 31 27
23D0: 2E 20 20 50 52 45 53 53
23D8: 8D 20 E1 2A 41 20 4B 45
23E0: 59 20 50 45 52 49 4F 44
23E8: 49 43 41 4C 4C 59 20 54
23F0: 4F 20 50 52 49 4E 54 20
23F8: 1B 20 4E 45 58 54 0D 50
2400: 41 47 45 2E 8D 20 E1 2A
2408: 4D 2E 20 20 10 20 11 4F
2410: 4E 20 57 49 4C 4C 20 53
2418: 45 54 20 1B 20 11 0D 46
2420: 4F 52 20 49 4E 50 55 54
2428: 20 4F 52 20 4F 55 54 50
2430: 55 54 2C 20 41 53 20 49
2438: 4E 44 49 43 41 54 45 44
2440: 20 4F 4E 0D 1B 20 44 49
2448: 53 50 4C 41 59 2C 20 57
2450: 48 45 4E 20 59 4F 55 20
2458: 45 58 49 54 20 13 08 2E
2460: 0D 4E 2E 20 20 10 20 11
2468: 4F 46 46 20 57 49 4C 4C
2470: 20 41 4C 4C 4F 57 20 59
2478: 4F 55 20 54 4F 0D 43 4C
2480: 45 41 52 20 1B 20 53 54
2488: 41 54 55 53 20 1B 20 11
2490: 57 49 4C 4C 20 48 41 56
2498: 45 0D 55 50 4F 4E 20 45
24A0: 58 49 54 20 46 52 4F 4D
24A8: 20 13 08 2E 8D 20 E1 2A
24B0: 4F 2E 20 20 10 20 0E 4F
24B8: 4E 20 44 4F 45 53 20 54
24C0: 48 41 54 2E 20 20 49 46
24C8: 20 1B 0D 0E 49 53 20 4F
24D0: 4E 20 41 4E 44 20 1B 20
24D8: 0F 49 53 20 4E 4F 54 2C
24E0: 0D 4F 55 54 50 55 54 20
24E8: 57 49 4C 4C 20 47 4F 20
24F0: 4F 4E 4C 59 20 54 4F 20
24F8: 1B 20 0E 08 2E 20 20 49
2500: 46 0D 1B 20 0F 49 53 20
2508: 41 4C 53 4F 20 4F 4E 2C
2510: 20 4F 55 54 50 55 54 20
2518: 57 49 4C 4C 20 47 4F 0D
2520: 54 4F 20 42 4F 54 48 20
2528: 1B 20 0E 41 4E 44 20 1B
2530: 20 53 43 52 45 45 4E 2E
2538: 0D 50 2E 20 20 10 20 0E
2540: 4F 46 46 20 44 4F 45 53
2548: 20 54 48 41 54 2E 8D 20
2550: 8A 2A 51 2E 20 20 51 55
2558: 49 54 20 52 45 10 53 20
2560: 59 4F 55 20 54 4F 20 42
2568: 41 53 49 43 2E 20 20 1B
2570: 0D 11 08 2C 20 0E 41 4E
2578: 44 20 0F 57 49 4C 4C 20
2580: 42 45 20 53 45 54 0D 4F
2588: 4E 20 4F 52 20 4F 46 46
2590: 20 41 43 43 4F 52 44 49
2598: 4E 47 20 54 4F 20 1B 49
25A0: 52 20 53 54 41 54 55 53
25A8: 0D 57 48 45 4E 20 59 4F
25B0: 55 20 45 58 49 54 20 13
25B8: 08 2C 20 41 4C 54 48 4F
25C0: 55 47 48 20 59 4F 55 0D
25C8: 43 41 4E 4E 4F 54 20 48
25D0: 41 56 45 20 1B 20 11 4F
25D8: 4E 20 46 4F 52 20 4F 55
25E0: 54 50 55 54 20 41 54 0D
25E8: 1B 20 53 41 4D 45 20 54
25F0: 49 4D 45 20 45 49 1B 52
25F8: 20 1B 20 0F 4F 52 20 1B
2600: 0D 0E 49 53 20 4F 4E 2E
2608: 0D 8D 20 E1 2A 42 59 20
2610: 45 58 49 54 49 4E 47 20
2618: 13 57 49 54 48 20 1B 20
2620: 0F 0D 4F 4E 2C 20 59 4F
2628: 55 20 43 41 4E 20 43 52
2630: 45 41 54 45 20 54 45 58
2638: 54 2C 20 19 08 0D 4F 52
2640: 20 41 53 43 49 49 20 17
2648: 16 53 20 4F 46 20 41 4E
2650: 59 20 4F 55 54 50 55 54
2658: 2C 0D 49 4E 43 4C 55 44
2660: 49 4E 47 20 44 49 53 41
2668: 53 53 45 4D 42 4C 49 45
2670: 53 20 4F 46 20 4D 41 43
2678: 48 49 4E 45 20 4C 41 4E
2680: 2D 0D 47 55 41 47 45 20
2688: 43 4F 44 45 2C 20 46 4F
2690: 52 20 4C 41 54 45 52 20
2698: 41 4E 4E 4F 54 41 54 49
26A0: 4F 4E 20 41 4E 44 0D 53
26A8: 54 55 44 59 2E 20 20 4F
26B0: 56 45 52 57 52 49 54 49
26B8: 4E 47 20 13 4F 52 20 54
26C0: 48 45 8D 20 E1 2A 0F 49
26C8: 54 53 45 4C 46 20 57 49
26D0: 4C 4C 20 43 41 55 53 45
26D8: 20 55 4E 50 52 45 44 49
26E0: 43 54 41 42 4C 45 0D 52
26E8: 45 53 55 4C 54 53 2E 8D
26F0: 20 8A 2A 50 2E 20 20 44
26F8: 45 56 49 43 45 20 53 54
2700: 41 54 55 53 20 52 45 50
2708: 4F 52 54 20 41 4C 4C 4F
2710: 57 53 20 59 4F 55 20 54
2718: 4F 0D 45 58 41 4D 49 4E
2720: 45 20 41 4E 44 1C 54 48
2728: 45 20 53 54 41 54 55 53
2730: 20 4F 46 20 11 0D 41 4E
2738: 44 20 1A 20 46 45 41 54
2740: 55 52 45 53 2E 20 20 59
2748: 4F 55 20 43 41 4E 3A 0D
2750: 1E 46 55 4C 4C 20 4F 52
2758: 20 48 41 4C 46 20 44 55
2760: 50 4C 45 58 8D 20 E1 2A
2768: 1E 57 48 45 54 48 45 52
2770: 20 54 4F 20 53 45 4E 44
2778: 20 41 20 4C 49 4E 45 46
2780: 45 45 44 0D 41 46 54 45
2788: 52 20 45 41 43 48 20 43
2790: 41 52 52 49 41 47 45 20
2798: 52 45 10 0D 1E 57 48 45
27A0: 1B 52 20 54 4F 20 53 45
27A8: 4E 44 20 41 4E 44 20 52
27B0: 45 43 45 49 56 45 0D 43
27B8: 4F 4E 54 52 4F 4C 20 1D
27C0: 28 1B 20 27 54 52 41 4E
27C8: 53 50 41 52 45 4E 43 59
27D0: 27 0D 44 45 53 43 52 49
27D8: 42 45 44 20 49 4E 20 1B
27E0: 20 4D 49 43 52 4F 11 4D
27E8: 41 4E 55 41 4C 29 8D 20
27F0: E1 2A 1E 57 48 45 1B 52
27F8: 20 4F 52 20 4E 4F 54 20
2800: 54 4F 20 54 52 41 4E 53
2808: 4C 41 54 45 0D 41 4C 4C
2810: 20 4C 4F 57 45 52 20 43
2818: 41 53 45 20 1D 49 4E 54
2820: 4F 20 55 50 50 45 52 0D
2828: 43 41 53 45 0D 1E 57 48
2830: 45 1B 52 20 4F 52 20 4E
2838: 4F 54 20 54 4F 20 44 45
2840: 4C 45 54 45 0D 1F 1D 46
2848: 52 4F 4D 20 0F 0D 28 49
2850: 46 20 59 4F 55 20 44 4F
2858: 20 4E 4F 54 20 44 45 4C
2860: 45 54 45 20 1F 0D 1D 08
2868: 2C 20 45 56 45 4E 20 1B
2870: 20 42 41 43 4B 53 50 41
2878: 43 45 53 20 57 49 4C 4C
2880: 20 42 45 0D 4B 45 50 54
2888: 20 49 4E 20 0F 08 29 8D
2890: 20 8A 2A 20 20 3E 53 45
2898: 54 20 1B 20 44 45 4C 41
28A0: 59 20 28 49 46 20 41 4E
28A8: 59 29 20 41 46 54 45 52
28B0: 20 41 20 43 41 52 2D 0D
28B8: 52 49 41 47 45 20 52 45
28C0: 10 20 28 4C 49 4E 45 46
28C8: 45 45 44 20 49 4E 53 45
28D0: 52 54 49 4F 4E 20 4D 55
28D8: 53 54 0D 42 45 20 4F 4E
28E0: 20 54 4F 20 47 45 54 20
28E8: 41 4E 59 20 44 45 4C 41
28F0: 59 29 0D 1E 33 30 30 20
28F8: 4F 52 20 31 31 30 20 42
2900: 41 55 44 0D 20 20 3E 53
2908: 45 54 20 1B 20 1D 08 08
2910: 20 4C 45 4E 47 54 48 2C
2918: 20 50 41 52 49 54 59 20
2920: 4F 52 0D 4E 55 4D 42 45
2928: 52 20 4F 46 20 53 54 4F
2930: 50 20 42 49 54 53 8D 20
2938: 8A 2A 44 49 53 43 4C 41
2940: 49 4D 45 52 3A 20 20 4E
2948: 45 49 54 48 45 52 20 1B
2950: 20 41 55 54 48 4F 52 20
2958: 4E 4F 52 0D 57 41 53 48
2960: 49 4E 47 54 4F 4E 20 14
2968: 50 49 20 53 48 41 4C 4C
2970: 20 42 45 20 4C 49 41 42
2978: 4C 45 20 46 4F 52 0D 41
2980: 4E 59 20 49 4E 43 49 44
2988: 45 4E 54 41 4C 20 4F 52
2990: 20 43 4F 4E 53 45 51 55
2998: 45 4E 54 49 41 4C 20 44
29A0: 41 4D 41 47 45 53 0D 41
29A8: 52 49 53 49 4E 47 20 46
29B0: 52 4F 4D 20 1B 20 55 53
29B8: 45 20 4F 46 20 54 48 49
29C0: 53 20 1A 2E 0D 4E 4F 20
29C8: 45 58 50 52 45 53 53 20
29D0: 4F 52 20 49 4D 50 4C 49
29D8: 45 44 20 57 41 52 52 41
29E0: 4E 54 49 45 53 20 41 52
29E8: 45 0D 4D 41 44 45 20 57
29F0: 49 54 48 20 52 45 53 50
29F8: 45 43 54 20 54 4F 20 54
2A00: 48 49 53 20 1A 2E 0D 8D
2A08: 20 E1 2A 49 46 20 59 4F
2A10: 55 20 48 41 56 45 20 41
2A18: 4E 59 20 51 55 45 53 54
2A20: 49 4F 4E 53 20 41 42 4F
2A28: 55 54 20 54 48 49 53 0D
2A30: 1A 2C 20 43 41 4C 4C 20
2A38: 1B 20 57 41 53 48 49 4E
2A40: 47 54 4F 4E 20 14 50 49
2A48: 0D 41 42 42 53 20 41 54
2A50: 20 28 33 30 31 29 20 36
2A58: 35 37 2D 34 35 30 37 20
2A60: 41 4E 44 20 4C 45 41 56
2A68: 45 20 41 20 4D 45 53 2D
2A70: 0D 53 41 47 45 20 46 4F
2A78: 52 20 1B 20 53 59 53 4F
2A80: 50 2E 8D 20 8A 2A 8D 4C
2A88: CC 2A 20 E1 2A 0D 43 54
2A90: 52 4C 2D 43 20 54 4F 20
2A98: 52 45 10 20 54 4F 20 4D
2AA0: 41 49 4E 20 4D 45 4E 55
2AA8: 0D 41 4E 59 20 4F 1B 52
2AB0: 20 4B 45 59 20 46 4F 52
2AB8: 20 4E 45 58 54 20 50 41
2AC0: 47 45 A0 20 0C FD C9 83
2AC8: D0 14 68 68 A9 EA A2 02
2AD0: DD 03 08 D0 06 CA 10 F8
2AD8: 4C 03 08 4C D0 03 20 58
2AE0: FC 68 85 F9 68 85 FA 8A
2AE8: 48 98 48 A0 01 B1 F9 48
2AF0: 09 80 C9 A0 B0 2B C9 8E
2AF8: 90 27 E9 8D AA 98 48 8A
2B00: A2 FF A8 88 F0 08 E8 BD
2B08: 40 2B 10 FA 30 F5 E8 BD
2B10: 40 2B 48 09 80 20 ED FD
2B18: 68 10 F3 AA 68 A8 8A 30
2B20: 03 20 ED FD C8 68 30 03
2B28: 4C ED 2A 18 88 98 65 F9
2B30: 85 F9 68 A8 68 AA A5 FA
2B38: 69 00 48 A5 F9 48 B8 60
2B40: 50 52 49 4E 54 45 52 A0
2B48: 4D 45 4D 4F 52 59 A0 54
2B50: 55 52 CE 4D 4F 44 45 4D
2B58: A0 54 45 52 4D 49 4E 41
2B60: 4C 20 4D 4F 44 C5 52 45
2B68: 4D 45 4D 42 45 52 20 5D
2B70: 5B A0 41 50 50 4C 45 A0
2B78: 53 41 56 C5 46 49 4C C5
2B80: 42 49 4E 41 52 59 A0 49
2B88: 4E 53 54 52 55 43 54 49
2B90: 4F 4E 53 A0 41 50 50 4C
2B98: 45 20 57 52 49 54 45 52
2BA0: 20 31 A0 50 52 4F 47 52
2BA8: 41 CD 54 48 C5 20 43 48
2BB0: 41 4E 47 45 A0 43 48 41
2BB8: 52 41 43 54 45 52 53 A0
2BC0: 20 20 3E 53 45 4C 45 43
2BC8: 54 A0 42 41 43 4B 53 50
2BD0: 41 43 45 44 2D 4F 56 45
2BD8: 52 A0 A8
3D0G
REM THIS LINE FIXES THE SLOT NUMBER:
POKE 6856,48+PEEK(1784)/16
REM IGNORE THE LINE THAT SAYS 'SAVE
REM REM II INSTRUCTIONS' AND USE THIS:
REM
REM BSAVE REM II INSTRUCTIONS,A$1901,L$12DA
REM
Text found in 090_Volume_90.dsk/RUN THIS SECOND.bas:
10 NOTRACE : TEXT : HOME : PRINT SPC( 12)"GUIDE TO WAPABBS": PRINT : PRINT :D$ = CHR$(4):F1$ = "SYSOP INSTRUCTIONS":F2$ = "WAPABBS NOTES"
20 FOR J = 768 TO 811: READ K: POKE J,K: NEXT : DATA 32,12,253,9,128,201,224,144,6,201,251,176,2,73,0,32,237,253,173,0,192,16,233,141,16,192,201,131,208,3,76,208,3,173,0,192,16,251,141,16,192,76,0,3
30 INPUT "TO WHAT SLOT SHOULD THE INSTRUCTIONS GO?(0=SCREEN) ";SL: IF SL <0 OR SL >7 THEN 30
40 INPUT "DO YOU WANT TO SEE LOWER CASE AS LOWER CASE? ";A$: POKE 782,32: IF LEFT$(A$,1) = "Y" THEN POKE 782,0
45 PRINT : PRINT "ENTER CTRL-C TO EXIT LISTING. ENTER ANYOTHER CHARACTER TO TEMPORARILY SUSPEND LISTING."
47 PRINT : PRINT "A WORD PROCESSOR SUCH AS APPLE WRITER IIOR SCREENWRITER WOULD MAKE A MORE": PRINT "ATTRACTIVE LISTING OF THESE FILES."
50 PRINT D$"MON I": PRINT D$"PR#"SL: PRINT D$"OPEN"F1$: PRINT D$"READ"F1$: ONERR GOTO 100
60 CALL 768
100 POKE 216,0: IF PEEK(222) > <5 THEN PRINT "ERROR # " PEEK(222): END
110 PRINT D$"OPEN"F2$: PRINT D$"READ"F2$: ONERR GOTO 200
120 CALL 768
200 POKE 216,0: IF PEEK(222) > <5 THEN PRINT "ERROR # " PEEK(222): END
210 PRINT D$"PR#0": PRINT D$"CLOSE"
Text found in 090_Volume_90.dsk/SYSOP INSTRUCTIONS.txt:
.cj
SYSOP NOTES
.lj
Congratulations! You are now about to become a Computer Bulletin Board System (CBBS) Operator. As System Operator (SYSOP), you will be responsible for maintaining a useful and informative service for your club, your organization, your friends, or the general public.
This program is called an Apple Bulletin Board System (ABBS), since it is a CBBS that runs on an Apple ][. As to hardware, you will need:
An Apple ][+ computer (or an Apple ][ with Applesoft on a ROMCARD or on a 16K Card);
Two standard Apple (or compatible) 5 1/4" disk drives running under DOS 3.3;
A D.C. Hayes Micromodem II in slot 3 (you may move it to slot 2 after making certain changes in the program);
The two disks containing this file, the WAPABBS program and sample files ready for your own adaptation;
A viewing device such as a monitor, CRT, or TV set that will allow you to see what the ABBS is doing;
A text editor for the addition, deletion and maintenance of the text files that the ABBS uses. The DOS Tool Kit, sold by Apple Computer, is adequate for your needs; a word processing program that uses text files will probably also work. Many Apple users' groups have excellent text editors in their program libraries;
A Mountain Hardware CPS Multifunction Card in slot 4 (this is optional -- the ABBS will work without the clock card, but you must change the date manually);
A printer to print out listings and preserve a record of messages (this is optional also). In order for the printer to record what the ABBS is doing while in operation, you must have a printer that uses an Apple parallel interface card in slot 1 or is otherwise able to print out a character POKEd to $C090; and
Additionally, you will want to give serious consideration to giving the ABBS its own private telephone line. No matter what times you tell your users that your system is up, they will call in at all hours of the day or night.
This is not a "turnkey" system. In order to run an ABBS effectively, you will need to know BASIC reasonably well. It would not hurt to know some assembly language. You should either know or expect to acquire by experience some knowledge of modems. You should have the Apple and Micromodem II manuals; try also to obtain a copy of manuals for the Novation Apple Cat II and the D.C. Hayes Smartmodem because people with these popular modems will probably ask you how to use the ABBS with them.
This program is copyright (1982) by Thomas S. Warrick. Sale of these programs for any price more than a nominal amount in excess of the value of the media is prohibited without express permission of the copyright holders. (In other words, you can't sell a copy of anything on these disks for a profit.)
THE FILES ON THESE DISKS:
The files on these disks are designed to run in specific disk drives. In drive 1 should be the disk with these files:
WAPABBS -- This is the ABBS program. Disk 1 will run this program on boot-up so that if your system suffers a temporary power outage the system will restart itself. This program will be described in great detail below.
ABBS1.OBJ0 -- This binary file contains the input/output routines and the "&" routines, which handle the message summary strings. To run the ABBS with your Micromodem in slot 2, change one of the first line numbers in the program's source code (on disk 2) and re-assemble it. (You will also have to change line 10 of WAPABBS to set SL = 2.)
ABBS3.OBJ0 -- This binary file loads several machine language routines into page 3. Most important is the line input routine, which begins at 768 ($300). The source file, ABBS3, is on disk 2.
STARTUP -- This text file contains 5 entries: today's date (in a special form discussed below in connection with field 3 of the MESSAGES file), the date of the last bulletin, the password for uploading files to the ABBS, the userid (pronounced YOU-zer-eye-dee, this string is used to identify a person, such as WAP001 or WP2027) for a person other than the SYSOP who is allowed to change the date, and the userid for a person other than the SYSOP who is allowed to change the date and to look at the password file. Note that if you have the CPS card, you will not need to worry about setting the date (except for the bulletin date). These will be discussed more below.
MESSAGES -- This is the principal file to which your users will be reading and writing; thus, it is first on the disk in order to make disk access as fast as possible. Understanding the structure of Messages is very important to an understanding of WAPABBS. Messages is a random-access text file with a record length of 452 characters. The file is initialized with 138 "EMPTY " records. When a message is in use, it consists of up to 14 fields, each followed by a return:
The userid of the sender (6 characters);
The userid of the recipient (6 characters);
The date of the message (13 characters in the form YYMMDD.HHMMSS, where YY=year, MM=month, DD=day, HH=hour, MM=minute, SS=second; this is the format for the date that must always be used in the STARTUP file)
A summary of the message (20 characters); and
The text of the message in up to 10 lines of up to 39 characters each. If the message is less than 10 lines, the last line of text is followed by a null line, i.e., a line with no characters prior to the return that ends the line.
USERS -- This text file contains 40-character records with this information:
characters 1-4: The numeric portion of the userid, in 4-digit form. Thus user 1 is "0001"; user 2027 is "2027";
characters 5-8: The password;
characters 9-23: The user's name with last name first;
characters 24-33: The last date the user called in, in the form YYMMDD.HHX, where X is 1/10ths of an hour. This is the maximum precision of Applesoft;
characters 34-37: The number of times the user has signed on;
character 38: The letter "N". This character is available for manipulation; you may, for example, use this character to record whether or not someone has answered the Opinion question;
character 39: The "!" character. This is used to make a border on printouts of the file. It is also available for manipulation by your own revisions of WAPABBS; and
character 40: A carriage return.
Note that after the return that ends the last user record there must be another return to signify the end of the file. The text editor you use to add or change passwords should be able to show you the length of this file. It must always be 1 greater than a number evenly divisible by 40 (e.g., 41 or 3961) in order for WAPABBS to work. WAPABBS accesses this file as a random-access file in order to check the passwords of users when they sign on, but as a sequential text file when printing out a list of passwords in response to a several command.
USERS.OBJ -- This binary file allows the USERS file to contain non-sequential userid numbers. Each location contains 255 ($FF) if the user is allowed on the system and 0 if the user is not allowed on the system. Thus where the USERS file begins with user numbers 0001, 0002, 0004, 0006 and 0008, USERS.OBJ would begin $FF $FF $00 $FF $00 $FF $00 $FF. USERS.OBJ is loaded into memory at $8400 and is $1000 (4096 decimal) bytes long; the first userid, 0001, is stored at $8401 and thus WAPABBS can have userid numbers up to 4095. An Applesoft program on disk 2, BUILD USERS.OBJ, allows you to update this file after you change the USERS file.
BULLETIN -- This text file is your way of communicating to all users any new information about the system, yourself, your club, or anything else. Everyone who signs on will be asked whether they want to read the bulletin before proceeding further. The bulletin is a sequential text file, and -- as with virtually all such files used by WAPABBS -- the last line entered must be a null line in order for the program to work properly. To keep your users' interest, you should change the bulletin at least weekly.
BBS -- This sequential text file gives phone numbers and other information of other CBBS systems in your area. Asterisks have been added as a border for esthetic purposes. This file also ends with a null line.
MEETINGS -- This sequential text file gives the dates, times and places of meetings of potential interest to your users. As this file comes to you, it gives the meeting information for Washington Apple Pi. This file also ends with a null line.
CLUB STORE -- This sequential text file provides information about any quasi-commercial ventures you, your organization, or anybody else may have. If you don't have any such activity, you may want to use this file as a "Shopper's Guide" to products, services and stores in your area. This file also ends with a null line.
In drive 2 should be the disk with these files:
INSTRUCTIONS -- This sequential text file gives instructions in the use of the ABBS to your new users. You should read these carefully. This file also ends with a null line. Insert your name in the file where appropriate.
BUILD USERS.OBJ -- This Applesoft program should be run every time you add or delete an entry to or from the USERS file. It looks at each record in the file and builds the USERS.OBJ file according to whether a particular userid is listed in the USERS file. BUILD USERS.OBJ then runs WAPABBS to restart the system.
TO SYSOP -- This sequential text file stores messages left to you by up to 9 people who do not have passwords. The first entry in the file is a one-digit number of the number of messages in the file. The text of the messages follows. This file may be retrieved only by you.
UPLOAD1 -- This sequential text file gives the instructions for uploading and downloading files from the ABBS. "Uploading" means sending files from other computers to the ABBS; "downloading" means sending files from the ABBS to other computers.
UPLOAD2 -- This sequential text file contains a list of files available for uploading. A null line terminates the listing; this is necessary so that uploads will adjust this file properly.
OPINION -- This sequential text file has as its first record a question to which everyone can respond. Answers are stored right after the question. Only you can see the answers, however. No check is made to see whether someone has answered more than once.
REMEMBER II -- This text file is available for downloading. You should EXEC it with MON I in effect, and BSAVE it as it says. This is, if I may say, an excellent terminal program for the Micromodem II. Non-commercial distribution is permitted, and this program may not be sold without express permission of Washington Apple Pi.
REM II INSTRUCTIONS -- This text file contains the instructions for REMEMBER II. You should EXEC it in the same manner to create a file called REM II.OBJ1, which REMEMBER II will access when you request instructions in its use.
ABBS1 and ABBS3 are source code for the binary files discussed above.
AN ANALYSIS OF THE PROGRAMS:
I. THE INPUT/OUTPUT ROUTINES
ABBS1.OBJ0 handles I/O for WAPABBS. The I/O routines are activated by a "CALL 37888" in line 32 of WAPABBS. This routine changes the CSW/KSW vectors ($36-$39) to the ABBS's I/O routines, sets the "&" vector ($3F5-$3F7), and jumps to the DOS routine that reconnects DOS's I/O hooks.
The Output routine, which begins at $9420, first does a test to see if the character being output is lowercase. If so, the character is EOR'ed against LOCSE. If lowercase-to-uppercase conversion is on, LOCSE is set to $20; if off, it is $00. Following this, the accumulator (hereafter referred to as "A") and the X and Y registers are saved on the stack.
Next, the keyboard is checked for an interrupt character such as ctrl-C. Since only the SYSOP can enter a key from the ABBS's Apple, this is given priority. If a key was not pressed, the Receiver Register Full bit is checked to see if an interrupt character has arrived through the modem. If not, the character in the accumulator is sent out through the modem, the A, X, and Y registers are restored, and the character is printed on the ABBS's computer's monitor in uppercase form.
If a character was entered at the keyboard or from the modem while output was in process, several tests are made. If the character was a ctrl-S, the program waits for another character to be received or entered before resuming output. Next, CKMASK is checked to see if a ctrl-C or ctrl-K is allowed. If either is allowed (i.e., if CKMASK = 0) and if the character received is indeed a ctrl-C or ctrl-K, the program clears the stack and jumps to Applesoft line 2000. If the character received was neither a ctrl-C nor a ctrl-K, it is ignored and the character is sent out anyway.
The input routine, which begins at $9488, first saves the X register, which is the offset from $200 (the start of the input buffer), into CLL, "Current Line Length." X is also saved on the stack and tested against LINEMAX. This prevents the user from entering a line longer than WAPABBS is expecting. If the line is too long, the user is sent a bell (ctrl-G).
After saving Y on the stack, WAPABBS checks ACTIVE ($E3). If ACTIVE >= 128, the ABBS hangs up the phone, clears the stack, and jumps to Applesoft line 1000. Next, the timer is reset to 0 unless WAPABBS is awaiting a call (ACTIVE=0). The timer is discussed in detail below.
If the ABBS is awaiting a call, the standard Micromodem input routine is used. This routine returns only when a call is answered. If carrier is detected -- which would not be the case if a human had dialled the ABBS by mistake -- ACTIVE is set to 2, the X and Y registers are restored, and the input routine is concluded. If carrier is not detected, ACTIVE is unchanged, and the next request for input will continue to await a call.
The next sequence of code hangs up the phone, using the Micromodem routine at $CAB5. ACTIVE is reset to 0, LOCSE is set to $20 so that lowercase characters will be translated to uppercase for the next caller, the stack is cleared, and control falls into the GOTO routine.
The GOTO routine, at $94D0, immediately outputs a return to clear any active input lines and outputs a ctrl-D followed by a return to terminate any active DOS commands. The line number passed to GOTO in the A,Y registers is used to set Applesoft's TXTPTR vector ($B8-$B9), the stack is cleared, and execution of the appropriate Applesoft line number begins.
The HANG routine, at $94FB, forces the ABBS's Apple to freeze up if program execution terminates for any reason. This prevents anyone from getting "inside" your computer. You will see a flashing "$33" if this routine has been triggered. Ctrl-C will return you to BASIC.
The regular input routine resumes at $951B. The timer is incremented by one. This timer will automatically hang up the phone if no one has entered a character for 7 minutes, 8 seconds. This prevents someone from tying up the ABBS by leaving their computer connected inadvertently.
If bit 6 of ACTIVE is set, the ABBS will ignore the modem. This is so that when you want to use the ABBS yourself, WAPABBS will not answer the phone. Thus if ACTIVE=64, no modem input is recognized.
If modem input is allowed, the modem is checked to see if the user's modem's carrier tone has been lost. If it has, WAPABBS hangs up the phone. If not, the modem is polled for data. If a character has arrived, the most significant bit is set and processing begins. If no data has arrived from the modem, the keyboard is checked. If a ctrl-A has been pressed by the SYSOP, WAPABBS responds:
MM II:
You may now enter these characters with these results:
ctrl-Z Hangs up on the user
ctrl-B Begins Chat mode by doing a jump to 4300
ctrl-I Flashes an "I" on the screen, meaning that the SYSOP is now "in"
ctrl-O Flashes an "O" on the screen, meaning that the SYSOP is now "out"
ctrl-R Sends a ctrl-R out over the modem
ctrl-T Sends a ctrl-T out over the modem
ctrl-U (right-arrow) Prints the userid of the current user (or the most recent user if no one is on the ABBS at the moment)
Otherwise, the character is ignored and input resumes. Note that anything sent by the user during the interval between the ctrl-A and the next character is neither received nor echoed.
If a character has been received, the ABBS's screen is set to non-flashing, which is Apple convention to let you know that a character has been received.
If a rubout has been received (ASCII $7F), the user is sent a bell and the character is ignored. If carrier has been lost, WAPABBS hangs up the phone. If a parity error, receiver overrun error, or framing error is detected, the character is ignored. The user will notice that his character was not echoed.
At this point, FLAGS is checked to ensure that DISPO, TRAN and KBDE are always set. (See the Micromodem manual.) Unpleasant results would ensue if one of these bits was cleared by static electricity or a cosmic ray.
If the character is lowercase and lowercase is not allowed by the ABBS, it is converted to uppercase. The most significant bit of a lowercase character must be cleared in order to fool the Apple's System Monitor.
Finally, the character that was received is checked to see if it is a control character. If not, LINEMAX is checked, and if the character would make the line too long, the character is ignored with a beep. If line length is acceptable, the X and Y registers are restored and the character is loaded into the accumulator, printed out through $C010, and the input routine is concluded.
If the character is a control character, special handling may be required. A carriage return is treated normally. A backspace is ignored with a beep if you backspace before you have entered anything that could be backspaced-over. A backspace is sent out over the modem as a backspace, a blank space, and another backspace. This erases the character from the user's screen, but not from the screen of the ABBS.
A ctrl-U (the right-arrow) picks up the current character from the ABBS's screen and treats that as the input character. This allows users to retrieve previously-erased characters.
The ABBS next checks to see if a ctrl-C or a ctrl-K is permitted. If so, and if the character is a ctrl-C or a ctrl-K, it is treated in the same manner as ctrl-C or ctrl-K were by the output routine.
A linefeed (ctrl-J) turns on LFI (see the Micromodem manual) which will send linefeeds after each carriage return. This affects modem output, not screen output.
A ctrl-X acts exactly as ctrl-X does on regular Apple input: it cancels the input line and asks for another one. X and CLL are returned to the left margin, i.e., zero.
Ctrl-L toggles LOCSE, which allows lowercase input. Ctrl-L has the function of a shift-lock key.
The short routines that follow handle the ignore-this-character routine and the cursor.
The next group of routines handle the ampersand ("&"). These routines manipulate the message summary strings, which begin at $6B00. These strings would require more than 1K of overhead if handled as traditional Applesoft strings.
1. Assign a string to the message summary array:
& A J,K,A$
where A means "assign", J is the message number, K is which part of the message summary the string is to be stored (0=the user the message is from, 1=the user the message is to, 2=the date, and 3=the summary of the text of the message), and A$ is the string to move into the message summary array.
2. Print a string:
& P J,K
where P means "print", and J and K have the same meaning as above.
3. Assign one of the elements of the array to B$:
& B J,K
where B means "LET B$ = ", and J and K have the same meaning as in string assignment. Note that only the variable B$ can be used in this manner. Furthermore, B$ must already have been set equal to something by an earlier program line or direct command such as: B$ = "HELLO"
4. Test an element of the message summary array:
& T J,K,A$,L
where T means "test", J and K have their usual meaning, A$ refers to the string being tested against the message summary item, and L is the variable used to store the result. The result will be:
1 if message summary item > A$
0 if message summary item = A$
-1 if message summary item < A$
II. THE PAGE 3 ROUTINES
ABBS3.OBJ0 has three routines. The first, called INLIN, is a revision of the well-known "Input Anything" routine. This modification, however, uses this syntax:
CALL INLIN [,X]
where INLIN=768 and X is the maximum allowable line length (LINEMAX). If X is not specified, the previous maximum line length is used. X must be between 0 and 255; note that if X>248, both you and the user will hear beeps after the entry of the 249th through 255th character. In order for INLIN to work, the first variable in the main Applesoft program must be a character string; WAPABBS uses A$. The routine accepts commas, colons, and quotation marks; only a return will terminate input. The routine ends by setting A$ equal to what was just entered, but A$ is still in the input buffer and will be written over by the next input request or by the next DOS command. To save the string, you must use the command:
A$ = MID$ (A$,1)
Note that a simple assignment statement such as B$ = A$ will not work.
The next routine does an index function:
CALL 804,A$,B$,J
This looks for the first character of A$ in the string B$, and returns with J equal to the relative position of the first occurrence of the character. So if A$="HELLO" and B$="ABCDEFGHIGHHH", J would become 8. If "H" did not occur in B$, J would be set to 0.
The third routine looks up the userid number and calculates the record number in the USERS sequential text file. Its syntax is:
CALL 892,J
where J is the userid number. J is returned as the record number. For example, if user WAP538 calls in, J would be set by a WAPABBS routine to 538. This routine would go through the USERS.OBJ file in memory and would calculate how many userid numbers between 1 and 538 were "active." The result would be the record number of user 538's password entry in the USERS file. If user 538 were not on the system, J would become 0. Note that this routine is used in the signon process and in the W and Y commands.
III. VARIABLES USED IN WAPABBS
A$ must be the first variable used in the program in order for the machine language routine at $300 to work. A$ is the workhorse string variable; all string input passes through A$. Note that if A$ has been set by the routine at $300, for so long as A$ is not assigned to another variable, A$ will not take up regular memory space and will not create "garbage."
ACTIVE is a flag used to tell the I/O routines whether the SYSOP, a user, or no one is currently using the ABBS. See above for a further description of the values ACTIVE can have.
AC$ [Allowable Commands] is a list of the letters of allowable commands. CALL 804 uses this to compute the index value of the response to the "COMMAND?" prompt for use by the ON J GOTO in line 2011. The CALL 804 routine requires that AC$ be a variable.
AL$ is "ALL ", and is used by the message handling routines to prevent errors that would occur if a user entered "ALL", which is only 3 characters long, instead of the 6-character response that the ABBS expected.
B$ is the secondary string variable. It is used by the "&" message summary routines and for other general purposes.
BD$ [Bulletin Date] is a 4-character string that tells users when the bulletin was most recently updated.
B(6) is an array used by the sorting routine that organizes the messages into date order.
C80 is 1 if the user has selected 80-column mode with the "+" command, 0 otherwise.
CH [CHat] is 1 if you have indicated your availability for a chat, 0 otherwise. See the description of the ABBS1 routines and program lines 1010 and 1020.
CK [CKmask] is 0 if the user is permitted to interrupt program execution and return to the "COMMAND?" prompt; 1 means interruption is not permitted.
CM$ is a comma (","). This must be a variable so that the CALL 804 routine can tell whether what should have been a file name has a comma.
CRDLY is the delay (in 0.1 seconds) sent after each carriage return if the user has specified linefeed insertion. This is the standard Micromodem delay. Note that setting this to 0 is equivalent to specifying a delay of 2.56 seconds.
D$ is ctrl-D.
D1$ [Date1] is "> " and is used to create a date value higher than any valid date. In this way, WAPABBS will sort the messages in proper date order.
DA$ [DAte] is the current date as specified in the STARTUP file or by the clock.
DA(MS) [DAte order; see below for meaning of MS] is used to store the messages in date order. DA(1) is equal to the message number of the oldest message, DA(2) is the number of the second oldest, etc.
DR [DRive] is a location within DOS 3.3 that, when poked with 1 or 2, will access that disk drive for the next DOS command without requiring ",D1" or ",D2".
E$ contains "E" and is used by CALL 804 to check that a number entered was not in exponential notation.
EM$ [Empty] contains "EMPTY ", and is used to erase the "From" value in message summaries and on disk.
ER [ERror] is used to store error codes. Certain errors are ignored, some are processed, and some stop program execution. See the description of the lines of WAPABBS beginning with 40000.
F [File number] is used to store the number of the file being accessed.
FC$ contains ctrl-D + "CLOSE". When printed, this will close all disk files.
FG [FlaGging messagesg] is 1 if, when reviewing message summaries, the user has chosen to flag those messages he wishes to read in full. It is 0 if the user has chosen not to be asked whether he will read the full text of certain messages.
FG(MS) [FlaGged messages; see below for MS] contains a 1 in an element if that message has been flagged for a reading of its complete text, and a 0 if the message has not been flagged.
FLAGS is the location of the Micromodem's FLAGS byte. See the Micromodem manual for complete details.
FO$ contains ctrl-D + "OPEN".
FP$ contains ctrl-D + "POSITION".
FR$ contains ctrl-D + "READ".
FW$ contains ctrl-D + "WRITE".
F$(12) contains the 12 file names used by WAPABBS.
INLIN is 768. This is the address of the line input routine beginning at $300.
J is the workhorse numeric variable. It is often the message number being printed or processed or an index in a FOR-NEXT loop.
JJ is a secondary general-purpose numeric variable.
K is the second most-commonly used numeric variable. It is often a line counter, used to make sure that message lengths are no more than 10 lines long.
KK is another secondary general-purpose numeric variable.
KU [Knowledgeable User] is 1 if the user claims to be familiar with the operations of the ABBS, 0 otherwise. If KU = 1, many prompts are shortened or eliminated.
L [Logical variable] is usually used as the result of a logical test of a message summary string using the &T function. It is usually -1, 0, or +1.
LC [Last Call] holds the date and time (to the nearest 0.1 hour) that the user last called in to the ABBS.
MC [Message Count] is the number of messages currently in use. Given the way DA(MS) works, DA(MC) is the message number of the most-recently entered message and DA(MC+1) is the message number of the most recently-deleted message and will become the message number assigned to the next-entered message. Think about this for a while.
MI$ is ctrl-D + "MON I". All files are printed out with MON I in effect because this is fast and causes no unnecessary interruptions between lines.
MO(12) contains the number of days in each month. Change this during leap years!
MS is the total number of messages that the system will allow. The two constraints to increasing this are disk space and space in the message summary area. Many arrays are dimensioned by MS.
M$(13) is used to enter and edit messages. M$(0) has the userid of the sender of the message, M$(1) has the userid of the recipient, M$(2) has the date the message was entered, M$(3) has the message summary, and M$(4)-M$(13) store the lines of the text of the message.
NM$ is ctrl-D + "NOMON C,I,O". See MI$ for an explanation of why this is necessary.
R [Record number] is used by the random-access file routines to select the message number to be read or written.
S1$ [Sysop1] has the SYSOP's userid in 4-digit numeric form. If the SYSOP's number were WAP001, for example, S1$ should be set to "0001". This is necessary to keep the "Y" routine from printing the SYSOP's password.
SL [SLot] contains the Micromodem's slot number.
SO [SignOns] contains the number of users who have successfully signed on. If someone signs on more than once, they are counted more than once.
SY$ [SYSOP] contains the userid of the SYSOP. Observe when going through the program listing that the SYSOP can do many things forbidden to others.
T1$ [T user 1] is the userid of a person who is able to change the date if you are unable to do so.
T2$ [T user 2] is the userid of the person who can change the date and print the password file. If you have no one to whom you want to allow access to the date or password file, set these to your own userid to prevent anyone from having this much access.
U$ [Userid] is the userid of the user currently on the ABBS. In case you have not guessed, a userid is a 6-character string with a 2 or 3 letter prefix and a numeric suffix in the range 1-4095.
UL$ [UpLoad] contains the letters of the four commands allowed during uploads.
UP$ [UPload] is the password necessary to begin uploading a file into the ABBS.
Z is a general-purpose numeric variable.
ble.
Text found in 090_Volume_90.dsk/TO SYSOP.txt:
0
Text found in 090_Volume_90.dsk/UPLOAD1.txt:
WAP ABBS FILE XFER FACILITY
THE TWO MAIN COMMANDS ARE UPLOAD
AND DOWNLOAD. THE INSTRUCTIONS ARE:
(DO NOT WORRY ABOUT "UPLOAD" UN-
LESS YOU HAVE TO. MOST PEOPLE USE
ONLY "DOWNLOAD.")
UPLOAD: THIS COMMAND IS USED TO
SEND A TEXT FILE FROM YOUR SYSTEM TO
THE ABBS. YOU MUST OBTAIN A PASSWORD
FROM THE SYSOP. THE ABBS' FILE SPACE
IS LIMITED, SO BE SURE TO TELL THE
SYSOP HOW LONG YOUR FILE IS. YOU
THEN DO AN "X" COMMAND TO BEGIN FILE
TRANSFER, A "U" COMMAND TO BEGIN FILE
UPLOAD. AFTER YOU HIT RETURN TO BEGIN
UPLOADING, EVERYTHING YOUR MODEM SENDS
OUT WILL BE RECORDED AS PART OF THE
FILE. (A PROGRAM LIKE REMEMBER II CAN
MAKE THE PROCESS OF SENDING A FILE
MUCH EASIER. YOU MAY NEED TO WRITE
A SHORT ROUTINE OF YOUR OWN TO SEND
YOUR TEXT FILE TO THE ABBS.) AT THE
END OF THE UPLOAD PROCESS, YOU (OR THE
PROGRAM THAT DOES THE UPLOADING) MUST
SEND "EOF" AS AN END OF FILE MARKER.
THIS WILL TERMINATE UPLOADING.
DOWNLOAD: THIS COMMAND WILL
SEND EITHER A TEXT FILE OR A BASIC
PROGRAM FROM THE ABBS TO YOUR SYSTEM.
YOU CAN RECEIVE THE FILE EITHER WITH
A TERMINAL PROGRAM OR, FOR BASIC PRO-
GRAMS, MERELY THE PROPER BASIC, DOS,
AND A D.C. HAYES MICROMODEM. (BE
AWARE THAT DATA CAPTURE 4.0 IS TOO
SLOW.) A TEXT FILE WILL MERELY BE
LISTED OUT, AND YOU MUST HAVE SOME WAY
OF SAVING IT. FOR MICROMODEM OWNERS,
THE ABBS WILL USE CTRL-R, CTRL-T AND A
POKE STATEMENT TO TAKE OVER YOUR
APPLE AND LOAD A BASIC PROGRAM IN
AUTOMATICALLY. NOTE THAT DOWNLOAD
MAY SEND YOU AN "FP" AND THEN WAIT 6
SECONDS BEFORE BEGINNING. THIS IS
NORMAL.
QUIT MERELY RETURNS TO COMMAND MODE.
(NOTE THAT CTRL-C AND CTRL-K DO
NOT WORK DURING FILE XFER.)
Text found in 090_Volume_90.dsk/UPLOAD2.txt:
REMEMBER II,A
REM II INSTRUCTIONS,A
Text found in 090_Volume_90.dsk/WAPABBS NOTES.txt:
IV. WAPABBS PROGRAM NOTES
WAPABBS is, of necessity, a long and complex program. This discussion will attempt to trace the execution of the program from the start through the end of initialization. Following this is a discussion of the subroutines (lines 30-910), and a discussion of the workings of the main routines.
Line 10 sets up HIMEM and certain of the key variables. Change SL if your Micromodem is not in slot 3. Execution then jumps via line 100 to line 20000.
Lines 20000-20999 initialize the program. Lines 20000 and 20010 check to see if the two machine language routines, ABBS1.OBJ0 and ABBS3.OBJ0, are in place; they are BLOADed if necessary. The next lines turn off TRACE, initialize the Micromodem, and hang up the telephone.
Lines 20040-20050 and 20070-20080 set up the variables for some of the PEEKs and POKEs and initialize the bytes as required. Line 20060 references two subroutines, at 30 and 32, which are discussed below. The cumulative effect of these two routines is to set Applesoft's "&" vector, located at $3F5.
Line 20090 sets up DOS commands as strings in order to save space. Line 20100 sets up the two strings of allowable commands.
Line 20110 says how many messages are allowed in the system at any one time. Many arrays are dimensioned with MS as a subscript.
Line 20120 gives the SYSOP's userid and S1$ value. It also dimensions array variables. Line 20130 reads in the file names.
Lines 20140-20250 read in the Messages file off of the disk and store the messages summaries in memory beginning at $6B00. Message 1 is stored first, message 2 second, etc. Lines 20250-20490 sort the message array by date order and create a list in the DA array that lists the messages in date order. Line numbers in this routine were carefully chosen in an attempt to minimize execution time.
Line 20500 loads USERS.OBJ into memory. Lines 20510-20540 load STARTUP into memory. Line 20550 reads the number of days in each month (change this during leap years!) and line 20999 says "READY" and returns execution to line 110, which passes control on to line 1000.
SUBROUTINES
Line 30 sets the Apple to standard system I/O routines: the keyboard and the screen. CALL 1002 is used rather than the traditional PRINT D$;"PR#0" so that no spurious returns are created.
Line 32 turns the ABBS's I/O routines on and sets the Applesoft "&" vector.
Line 33 makes editing simpler. To list a line in a form that is easy to copy with the right-arrow key, do a GOSUB 33:LIST [line number] and the screen will be cleared, the margins will be set to eliminate the extra spaces, and the line will be listed.
Lines 50-55 update the date string, DA$. If you do not have a CPS Multifunction Card, DA$ will not be changed.
Lines 200-240 print the Message Header for a number of routines. On input, Z is the message number. On exit, B$ is the date the message was entered; L is also changed.
Lines 300-350 print most files. After drive 2 is selected (if necessary), the file is read a line at a time. Because MON I is in effect, there is no specific printout of the line. Every second carriage return is converted into a space if the 80-column mode is in effect. If the file is the Messages file, the first 4 records are skipped, since they contain the same information as the message header, which was printed by the routine at line 200. Upon exit, the file is closed. On entry, F is the number of the file; upon exit A$ and Z are changed.
Lines 400-490 ask the user how far back he wishes to search for messages. "A" will retrieve all messages or summaries; a Return retrieves only those since the user's last call. Entry of a number will retrieve all messages within that number of days, where "0" will retrieve only those messages entered today. "Days" are calendar days, thus to a caller at 12:05 a.m., a message entered 10 minutes before would be one day ago. If no messages are found that qualify (i.e., if K > MC), control goes to line 2000. Upon exit, J is set to the date you are searching for (YYMMDD.HHX), K is the relative message (in date order) that was the oldest message within the chosen number of days. A$, B$, J, and JJ are changed.
Line 500 sets up the ABBS to write to File F, Record R.
Lines 600-630 call a machine language routine that takes a userid such as WAP001 and converts it into the record number in the USERS file. On exit, J is the relative record number and A$ is the numeric portion of the userid.
Lines 700 and 701 open the Messages and Users files as Random-Access files.
Lines 800-810 set up file F for input. Set R to the desired record number before opening Messages or Users.
Lines 900-910 perform a J = VAL(A$) function that prevents errors that would be inevitable if a user entered "1E99" in response to a request for numeric input. Since WAPABBS does not use negative numbers, this routine returns only absolute values.
Line 1000 begins the "AWAITING CALL" routine. Garbage is collected (line 1000), and all variables are initialized: the cursor is set so that DOS will allow deferred-execution commands, CKMASK is set so that ctrl-C and ctrl-K cannot interrupt execution, SPEED is set to the maximum, the modem is turned on, all files are closed, delay after Returns is turned off, lowercase-to-uppercase translation is turned on, drive 1 is selected, the "Knowledgable User" flag is cleared, 80-column mode is cleared, and WAPABBS waits for a call. Once a call has been received, the CALL INLIN,248 statement has been satisfied and the ONERR vector is reset.
Given the Micromodem's phone answering routine, only a response from the keyboard could have input a non-null string in response to the input statement in line 1000. Line 1010 therefore allows you to do certain things while WAPABBS is operating. If you enter SYSOP, you can change the STARTUP file, look at the "TO SYSOP" file, and check on the number of callers. This routine, at 30000, will return you to the "COMMAND?" level.
To bypass the STARTUP questions, you may enter a ctrl-S, which will automatically log you onto the ABBS. Others cannot use the ABBS while you are using it. Be aware that while ctrl-S relieves you from having to enter your password, it does not check the date you last called in, and so the "Last Call" value will be whatever it was for the previous caller.
You may signal your willingness to chat with users by entering "IN" or unwillingness by entering "OUT". If you enter a ctrl-C, the ABBS will quietly turn off the modem and return to BASIC.
Line 1040 is the first thing that your users will see when they call up. Asking for a return is necessary so that people with acoustic couplers have some time to get set up, and so that people with parity or other problems will see that they need to change something. Experience has taught me not to delete this line. If the user enters a number here, it will become the delay after carriage return when linefeed insertion is selected. Users requiring linefeeds or a delay should enter here a ctrl-J (linefeed), followed by the amount of delay (if any), followed by a Return.
Change line 1050 when you want to let your users know important news about the system.
Users have three tries to enter their passwords. Help is offered after the second unsuccessful attempt. Three incorrect tries jumps control to a "Guest" routine at line 22000.
Line 1100 converts userid's in the form WP0xyz to WAPxyz because otherwise the ABBS would not know the two were the same individual. Line 1120 looks up the password, and line 1130 reads and updates the "Last Call" variable. Line 1140, which only the SYSOP sees, says how many users have logged on. Line 1150 locks out other callers from the ABBS if you are using it. Since the only way for ACTIVE to be 0 at this point is if you have accessed the ABBS from the keyboard, ACTIVE is set to 64 so that any calls while you are using the ABBS will ring unanswered.
Line 1160 is the entry point for the "P" command. Line 1170 offers the user an opportunity to read the Bulletin, which is printed out by line 1180. The user is next shown the message numbers of all messages for him. The numbers are presented in chronological order.
Line 2000 is the "COMMAND?" processor. Once a user has logged on, control will always pass through this line. The ctrl-C and ctrl-K commands always return control to this line after they clear the stack of incomplete GOSUB-RETURNs and FOR-NEXTs. These things must be done: Forbid ctrl-C and ctrl-K briefly so that WAPABBS will be able to do some work without interruption, set ALLOWLC so that all lowercase will be converted to uppercase, turn the modem on (in case something turned it off), turn off MON I, close all files, enable ctrl-C/ctrl-K, set the drive to 1, and request a "COMMAND?"
Line 2010 gets a three-character input line and checks to see if it is a number. If so, control passes to the routine at 5200 that will print out that message. If the line entered was not a number, its first character is treated as a command and looked up in AC$. If it was not a valid command, a brief summary of legal commands is displayed. Control then returns to the "COMMAND?" processor.
THE ROUTINES (in order of line number):
Note that, for the most part, commands begin on lines with even hundred line numbers. While there were no rigid definitions applied to the order of the commands, you may notice that, generally, commands with line numbers in the 3000's access informational files, commands with line numbers in the 4000's set or clear flags, and commands with line numbers in the 5000-6000's process the Messages file. Upload is the 10000's and Download is the 11000's.
The first routine is the "Help" routine at line 2030 ("H"), which is essentially a one-line description of each available command.
The Bulletin, Meetings, and Instructions files are handled by lines 3000-3200 ("B", "M", and "I"). Lines 3300-3430 ("W") are the "Who" routine, which connects userid's with names. The name-to-number routine asks for the first two letters of the name and searches every user record for a match. The number-to-name routine, at line 3400, treats the USERS file as a Random-Access file and looks up only that particular password generally name.
Line 3500 ("$") lists the Club Store file.
Lines 3600-3690 ("Y") allow you and one other user, whose userid is stored in T2$, to look at one or all records in the USERS file. This will also print out passwords, except that the SYSOP's password cannot be printed. The SYSOP's password can only be inspected by a text editor from the keyboard of the ABBS.
Lines 3700-3750 ("O") control the public opinion poll. If you are the user, WAPABBS asks you if you wish to examine the file. Note that WAPABBS's error handling routines will cause program execution to return to the "COMMAND?" processor at the end of the Opinion file listing. If you do not ask to see the listing, and in any event for all other users, the question is posed and the user is asked if he or she wishes to respond. (You may wish to insert a routine that checks to see if the user has answered the question before.) If the user wishes to enter a response, up to 65 characters are allowed. Note that if this file fills up disk 2, your users may be thrown off of the system by a disk full error. Monitor the size of this file carefully.
Line 4000 ("K") toggles the "Knowledgable User" flag. If equal to one, many prompts are shortened; thus "COMMAND?" becomes "?".
Lines 4100-4180 ("N") allow the user to select linefeeds after carriage returns, delays after carriage returns, or overall speed delays. Read your Micromodem manual for a detailed description of how linefeed insertion and delay after carriage returns work.
Lines 4200-4230 ("C") allow the user to request a chat with the SYSOP. If the SYSOP comes to the ABBS keyboard and enters ctrl-A ctrl-B, line 4300 will print a greeting and enter Chat mode. Note that while in Chat mode, both you and the user must insert Returns at least every 248 characters. You will notice when chatting that WAPABBS will not allow you to enter more than 248 characters per line, but your user will hear beeps for every extra keystroke either you or he makes! Chat mode can ONLY be exited by ctrl-C or ctrl-K, which either you or the user can enter.
Lines 4400-4430 ("T") allow the SYSOP and the users designated T1$ and T2$ to change the date. This is unnecessary if you have a CPS Multifunction card. The date must be entered in the form YYMMDD.HHMMSS, where YY=year, MM=month, DD=date, HH=hours, MM=minutes, and SS=seconds.
Lines 4500-4530 ("?") simply prints out the letters of allowable commands. You, T1$, and T2$ are shown the special commands only you three may enter. Line 4600 ("+") toggles the 80-column mode. Only the subroutine beginning at line 300 recognizes 80-column mode, which merely converts every other Return into a space.
Lines 5000-5030 ("Q") give a quick summary of the messages for you, from you, and for all. Message numbers are listed in chronological order. Returns are inserted periodically so that message numbers are not split across text screen lines.
Lines 5100-5150 ("S") scan the message summaries. The user is first asked whether he wishes to flag messages for later reading in full; if he says yes, FG is set to 1 and the FG(MS) array is cleared. The user is then asked how far back he wishes to scan. See the description of the subroutine beginning at line 400. JJ is set to 0 so that, if no messages are selected for reading in full, execution will return immediately to line 2000. Then each message summary is listed, followed (if applicable) by a query as to whether the user wants the message flagged. Note that the SYSOP can read all message summaries, whereas others can read the summaries of messages to them, from them, or for all. Once a message is flagged, JJ is set to 1. At the conclusion of the summary of the most recent message, if the user has flagged any messages, KK is set to 0 and the user is sent to the "L" command at line 5810; otherwise, control returns to line 2000.
Lines 5200-5240 print particular message numbers. The SYSOP can read any message. If the message was to the user, he is asked whether he would like to delete it at once. If he does, control passes to the Delete subroutine at 5350; otherwise control returns to line 2000.
Lines 5300-5380 ("D") delete messages. Lines 5300-5310 merely let you select the message to delete. Only the sender of the message, the recipient and the SYSOP can delete a message. The actual deleting is done by a subroutine betinning at 5320. On entry to the subroutine, J is the message number to be deleted. The "From" portion of the message summary is made equal to "EMPTY ". Note that the message number is pulled out of the DA(MS) array and placed at the top of the inactive message portion of the array, i.e., at DA(MC+1). All other message numbers are moved up one in the array. On exit, K, L, Z, and B$ are changed; note that KK is reduced by one. KK is used by the Flush Messages ("F") routine.
Line 5400 ("E") calls the Enter Message subroutine at 5401-5680. This is one of the most important routines in WAPABBS, and you should consider studying it carefully.
After making sure that space is available for the message (line 5401), ctrl-C/ctrl-K recognition is disabled. J is set to the message number at the top of the available number stack. The user is asked to designate the recipient. Lines 5420-5460 handle the response. (Note that line 5440 handles the "C" response.)
Beginning with line 5470, the entry of the Message summary, lowercase is allowed. WAPABBS treats lowercase as lowercase only during entry of a message or its summary; at all other times, lowercase is converted by the ABBS into uppercase. Following the summary, the user enters the text of the message one line at a time. After he has entered a null line or the tenth line of text, ALLOWLC is turned off and the user is asked whether he wants to save the message. If he answers anything but "N", the messages is written to disk from the M$(13) array. After writing to disk is complete, the message summary is entered into memory using the "&" routine. Note that these two steps must be done after the user has approved the message, because if the user had begun to enter a message to ALL and had gotten cut off, a partially entered message would still have the text of someone else's old -- and perhaps confidential -- message, which would be retrievable by everyone. After the message is saved, FG(J) is set to 0 so that the message will not be retrieved by the flagging process, which may be underway if the Message Entry was entered from the "L" routine rather than directly with "E".
If the user elects not to save the message, he is presented with three options: edit the message, cancel it, or re-enter it from scratch. Cancelling the message concludes the Entry subroutine; "R" returns to the top of the Entry subroutine. Editing allows the sender (or the SYSOP) to change any part of the message except the date and the sender's userid. In many respects the Edit routine is merely a specialized Entry routine, allowing entry of particular lines instead of an entire message. By and large, the same variables are used in Edit as in Entry.
Lines 5800-5840 ("L") list out the full text of messages much in the same way as "S" lists out summaries. JJ is 0 to distinguish "L" from the flagged listing printed out by the "S" command, which enters at line 5810. KK is used as the index into the DA(MS) array, and Z is the actual number of the message being listed. Note again that the SYSOP sees all messages, whereas others can see messages for themselves, from themselves or for all. After listing the message in line 5830, the user is offered the option of deleting the message if it is to him.
The user is then asked if he would like to enter a message. If he responds Yes, the "Entry" subroutine at 5401 is called. In any event, WAPABBS goes back to line 5810 to list out the next message.
Lines 5900-5930 ("F") Flush old messages from the files. Only the SYSOP can flush messages. All messages older than message number KK are printed and you are given the opportunity of deleting them. At any given moment, KK is the relative number in the DA(MS) array of the message being listed, and JJ is the relative number in the DA(MS) array of the latest message that you will be offered the opportunity of deleting.
Lines 6000-6050 ("A") allow you or the sender of a message to edit it after it has been sent. This routine calls the Edit subroutine at 5550. K is used to measure how many lines of text are in the message.
Line 9000("R") is set aside for a command of your own design.
Lines 10000-10020 ("X") are the introduction to the File Transfer System. Line 10020 prints the instructions for File Transfer.
Lines 10030-10140 allow the user to send files to the ABBS. After verifying that the user knows the Upload password, which he must have learned from you, he is asked for a file name, and the file name is checked against other upload file names. (Make sure that you tell users not to use the name of another program on disk 2.) The user is also asked for the file type, which will affect how the program is downloaded.
The actual uploading process is done by line 10120. When the user sends a line consisting of "EOF" (End of File), uploading ends. If a line has less than 4 characters, i.e., shorter than the shortest valid BASIC or assembly language program line, it is ignored. Each valid line is written to disk as it comes in, so that it need not be stored in memory. When the upload is completed, two null lines are written (the second is as a safety precaution) and upload is concluded.
Downloading (lines 11000-11120) is automatic for a user with an Apple and a Micromodem. After offering the user a choice of files available (note that the first record of UPLOAD2 is the number of files available for downloading.) Line 11060 actually begins the downloading process. A ctrl-R is sent to the user's Micromodem to force it into remote mode. Now the ABBS is running the user's Apple. "FP" or "INT" is sent to clear memory and select the proper language. After a short pause in case Applesoft must be loaded off of a disk, the file is sent out. Downloading is terminated at the first occurence of a null line, although a null line at the outset will not terminate downloading. The "POKE PEEK . . . " line is used by the Micromodem to select full duplex so that the ctrl-T sent thereafter will return the user's ABBS to the proper state. The user is then sent an instruction on how to save the file.
OTHER ROUTINES:
Line 19000 prints a sign-off message prior to hanging up the telephone. Lines 22000-22060 print a message to people who fail to sign on successfully after three attempts. You should change this program to suit your situation. Line 22060 allows up to 9 messages to be sent to you by people without passwords. This is necessary to keep from overwriting the first character of the first message to you. (Also, without a limit certain unpleasant people might try to fill up your disk space with garbage.)
Lines 28000-28510 ("Z") are a security section. In order to access remotely certain system data, a caller must know your password, but even then they must first run the gauntlet of three or so questions to which you AND ONLY YOU should know the answers. I have set up 10 questions; you should use your own. If the answer is wrong, control passes to line 28500, which allows one wrong answer but makes you answer three more questions. The second wrong answer disconnects the caller. The questions are presented in random order so that a caller would have some difficulty setting up a program to call your ABBS repeatedly and try out answers.
The system information, which can be accessed remotely by "Z" or directly from the keyboard by entering "SYSOP" in response to the AWAITING CALL line, consists of two parts: the STARTUP file and housekeeping. The first part walks you through the STARTUP file, in the order of date (which is actually done by a routine at 4410), bulletin date, Upload password, T1$, and T2$. Hitting return by itself does not change the current entries. If any changes were made to STARTUP, they are recorded.
You are then shown any special messages that have been left for you (line 30090). You may delete these messages to clear the file for additional messages. You are then shown the number of free bytes. This is not done by the FRE(0) command, which does housecleaning before telling you the amount of free space; rather, this value is the amount of free space prior to doing any housecleaning. You will then see the number of people who have signed on, and you may clear this number if you wish. Next, the ABBS tells you if an error has occurred. If one has, you may request that the ABBS's screen be printed on your remote terminal. You may then have the option of rebooting the entire ABBS system. You should do this if an error has already occurred and you do not want the next error to shut the system down, or if some random byte has been changed erroneously. Note that resetting the system will cause the ABBS to ignore you for a few seconds, then disconnect you.
Errors are handled by lines 40000-41010. The ONERR GOTO line sends control first to line 41000, which checks for an END OF DATA error; this is not treated as an error and execution continues with the "COMMAND?" line. If this is not the cause of the error, the modem is turned off and the error number is printed on the screen. If no error has occurred before -- which will be the case if PEEK(34) is 0 -- certain key variables are printed as well. If the error were a DISK FULL or a bad response to an input statement or a ctrl-C interrupt, the ABBS continues execution with the "COMMAND?" prompt. Otherwise, the ABBS hangs up and awaits another call.
If the error is the second one to occur, line 40100 shuts down the system. You may wish to have the system reboot itself, because quite often the error will have been caused by a random glitch in memory, which can be cured by reloading DOS and WAPABBS.
Line 45000 is used as an exit by the part of ABBS1.OBJ0 that freezes up the system if program execution ends. Whenever the flashing "$33" appears, a ctrl-C from the keyboard will cause a jump to line 45000, which shuts down the modem and returns to BASIC.
AND IF YOU NEED HELP
If you require further assistance with this program, write to:
Thomas S. Warrick
ABBS SYSOP
c/o International Apple Core
908 George Street
Santa Clara, California 95050
You may also try writing me through Washington Apple Pi at Post Office Box 34511, Bethesda, Maryland, 20817, although this address may change in the future. In either case, please enclose a self-addressed, stamped envelope. (If you are a member of Washington Apple Pi, you will get our journal, which will have our current address. Membership will also entitle you to use our ABBS, which will allow you to send messages to me directly.)
SELF-IMPROVEMENTS
- Addeddate
- 2014-08-18 01:05:51
- Emulator
- apple2e
- Emulator_ext
- dsk
- Identifier
- riag_010_090_Volume_90
- Scanner
- Internet Archive Python library 0.7.0