#========================================================================= #WTMR_001.MAC V10.5 #========================================================================= DIR00: #発言ルーチン。 PRINTCR("□書き込み指定ファイル捜査中です□") GETMACROD(I$) #I$=D:\WT\MACRO\ CAT(I$,"_PAD_.PAD") #I$=D:\WT\MACRO\_PAD_.PAD IFFILEY(I$) #I$=D:\WT\MACRO\_PAD_.PADがある場合。 DELFILE(I$) #D:\WT\MACRO\_PAD_.PADを削除。 GETTXUPD(D$) #D$=G:\UP_TXT\ CAT(G$,D$,&) #末尾\カットのためのダミー&追加。G$=G:\WT\UP_TXT\&。 CHANGE(G$,"\&"," >") #G$=G:\UP_TXT > CAT(E$,"DIR ",G$) #E$=DIR G:\WT\UP_TXT > CAT(E$,D$) #E$=DIR G:\WT\UP_TXT >G:\WT\UP_TXT\ CAT(E$,"DIR.TXT") #E$=DIR G:\WT\UP_TXT >G:\WT\UP_TXT\DIR.TXT CHILD(E$) #E$を実行。DIR.TXT作成。既にあれば,上書き。 PICKWORD(F$,E$,">") #E$を>で区切る。E$=G:\WT\UP_TXT\DIR.TXT DELAYM(1000) #同期調整。 G$=6 #読み込み行初期値-1 DIR: WOPEN("_PAD_.PAD") #MACROディレクトリに,送信指定ファイル作成。 WCLOSE #いったん閉じる。WAPPENDのため。 FOPEN(E$) #DIR.TXTオープン。 DIR1: A$="" ADD(G$,G$,"1") #読み込み行+1 CAT(A$,G$,"") #A$=G$ FILER(E$,A$) #DIR.TXTからA行目読み込み。A$に格納。 JUMPSRCHY(A$,"ファイ",NEX) #ファイル末。NEXへ。 JUMPSRCHY(A$,"",DIR1) #ディレクトリ行。DIR1へ戻る。 JUMPSRCHN(A$,"RES",DIR1) #拡張子がRESでないファイル行。DIR1へ戻る。 JUMPSRCHY(A$,"は",DIR1) #説明行。DIR1へ戻る。 FCLOSE #DIR.TXT閉じる。 WAPPEND("_PAD_.PAD") #追加書き込みファイルオープン。 PICKWORD(V$,A$," ") #A$= EXE 8,234 95-01-01 1:00 など。空白で区切。 JUMPSRCHN(A$,"RES",DIR1) #A$にRESがなければ,DIR1へ。あれば下の処理へ。 WRITE(V$) #_PAD_.PADに,V$=12_45 などを書き込み。 WCLOSE #_PAD_.PAD閉じる。 FOPEN(E$) #DIR.TXTオープン。 VCLEAR("AV") #A$,V$初期化。 GOTO(DIR1) #DIR1へ戻る。 NEX: #DIR.TXT読み込み終了後処理。 FCLOSE #DIR.TXT閉じる。 DELFILE(E$) #DIR.TXT削除。E$不要。 FOPEN("_PAD_.PAD") #_PAD_.PAD読み込みオープン。 UPT: #_PAD_.PAD指定内容による分岐ルーチン。 FREAD(A$,UPTEND) #A$に_PAD_.PADから一行読み込み。EOFならば,終了処理。 GETTXUPD(D$) #D$=G:\UP_TXT\ CAT(D$,A$) #D$=G:\WT\UP_TXT\12_505 CAT(D$,".RES") #D$=G:\WT\UP_TXT\12_505.RES ROPEN(D$) #アップ文書ファイルオープン。 RREAD(K$) #K$=TITLE(アップ文書ファイル一行目) LEFT(K$,"30") #K$=TITLE,30文字以上をカット。 JUMPSRCHY(A$,"MAR0",ML) #MAIL指定(MAR0****.RES)の場合,MLへ分岐。 #------------------------------------------------------------------------- BS: #会議室発言の場合。 H$="_" #区切り文字。 VCLEAR("FS") PICKWORD(J$,A$,H$) #J$=12,A$=505 or W など。 CAT(S$,J$,"") #S$=J$=12 CAT(S$,")") #現在会議室番号取得ルーチン。 CAT(F$,"D",S$) #F$=D12) JUMPSRCHY(Z$,F$,BBSWW) #Z$は,プロンプトの行を格納している。居場所の確認。 VCLEAR("FHLSZ") SEND(J$) #J$=12(会議室番号)送信。 SEND("\R") CALL(LOOP0) #PROMPT待ち。 GETCRTS(H$,"2") #指定ミス等確認。ミスの場合は,RETRYへ分岐。 JUMPSRCHY(H$,"◆",RETRY) BBSWW: #発言が,レスか,オリジナルかの分岐。 JUMPE(A$,"W",BS_0) #J$=Wの場合(オリジナル発言),BS_0へ。 CAT(L$,"RES ",A$) #L$=RES 505 VSWAP(L$,A$) #L$とA$を交換。A$=RES 505 BS_0: SEND(A$) #レス先番号 or W 送信。 SEND("\R") CALL(LOOP0) GETCRTS(H$,"2") #指定ミス等確認。ミスの場合は,RETRYへ分岐。 JUMPSRCHY(H$,"◆",RETRY) CONVERT(OFF) #制御文字非変換。 SEND(K$) #TITLE送信。 CONVERT(ON) SEND("\R") CALL(LOOP0) GETCRTS(H$,"1") #TITLE入力ミスの確認。 T$="BBSW1" #この場合は,TITMIS0で使用する居場所フラグ。 JUMPSRCHN(H$,"確認",TITMIS0) BBSW1: SEND("\R") #TITLE確認。 T$="BBS0" #この場合は,EOFで使用する居場所フラグ。 CALL(LOOP0) GOTO(SEND) #汎用送信ループへ。 BBS0: #/Eがない場合,/E送信後処理。EOFから。 CALL(LOOP0) SEND("\R") #修正確認。 CALL(LOOP0) SEND("\R") #登録確認。 BBS0_: #登録確認後。EOF_から。会議室書き込み最終処理。 RCLOSE #送信済ファイル閉じる。 CALL(LOOP0) V$="namv -a " #NAMV.EXEを使用。 CAT(V$,D$) #V$=namv -a G:\WT\UP_TXT\12_505.RES Q$=" $(TxtUpD)DONE\" #Q$はMAILルーチンでも使用。 CAT(V$,Q$) CHILD(V$) #送信済ファイル移動。 VCLEAR("AJL") GOTO(DAT_) #CHAT判断ルーチン,後_PAD_.RAD読み込み分岐へ。 #========================================================================= ML: #A$=MAR0****。MAIL先ID。 JUMPSRCHY(Z$,"MAIL",MAIL1) #Z$はプロンプト行を格納している。MAIL MODEか否か確認。 Z$="" #Z$初期化。 SEND("M\R") #MAIL MODEへ。 CALL(LOOP0) MAIL1: SEND("W\R") #書き込み送信。 CALL(LOOP0) CONVERT(OFF) SEND(K$) #TITLE送信。TITLEはUPTでカット済。 CONVERT(ON) SEND("\R") CALL(LOOP0) GETCRTS(H$,"1") #TITLE確認。ミスがあれば,TITMIS0へ。 T$="MAIL01" #TITMIS0で使用する居場所フラグ。 JUMPSRCHN(H$,"確認",TITMIS0) MAIL01: SEND("\R") #TITLE修正確認。 T$="MAIL0" #NEXT_で使用する居場所フラグ。 CALL(LOOP0) GOTO(SEND) #汎用送信ループへ。 MAIL0: CALL(LOOP0) #/E送信後。 SEND("\R") #修正確認。 MAIL0_: #修正確認後,から。 CALL(LOOP0) SEND(A$) #A$は送信先ID,UPTで設定。宛先送信。 SEND("\R") U$="MAIL000" #IDMISの場合の居場所フラグ。 STIMEOUT(2) SWITCH CASE("◆") #エラーメッセージの有無確認。 GOTO(IDMIS) END CALL(LOOP0) SEND("\R") #宛先登録確認。 MAIL000: #送信済ファイル移動処理。MAIL送信最終処理。 CALL(LOOP0) RCLOSE #送信済ファイル閉じる。 V$="namv -a " Q$=" $(TxtUpD)DONE\" CAT(V$,D$) #V$=namv -a G:\WT\UP_TXT\MAR*****.RES CAT(V$,Q$) CHILD(V$) #送信済ファイル移動。 VCLEAR("LJF") #J$,L$は会議室番号,レス先番号等で使用。 GOTO(DAT_) #CHAT判断ルーチン,後_PAD_.PAD読み込み分岐へ。 RETRY: PRINTCR("□この会議室には書き込めません。指定ファイルをリネームします□") RCLOSE A$="" CAT(A$,"REN ",D$) #A$=REN G:\WT\UP_TXT\12_505.RES CAT(A$," *.ERR") #A$=REN G:\WT\UP_TXT\12_505.RES *.ERR CHILD(A$) #書き込みエラーファイルの拡張子をERRにリネーム。 DELAYM(1500) #同期調整。 VCLEAR("ALJF") #J$,L$は会議室番号,レス先番号等で使用。 GOTO(DAT_) #========================================================================= SEND: #汎用文書送信用ルーチン。EOFとセット。 RREAD(F$,EOF) #発言ファイル読込。続きがなければ終了処理へ。 JUMPE(F$,"/E",NEXT_) #/Eがある場合,NEXT_へ分岐。 CONVERT(OFF) SEND(F$) #発言ファイル内容一行送信。 CONVERT(ON) SEND("\R") GOTO(SEND) #SENDへ戻る。 EOF: #アップ文書終了処理。 SEND("/E\R") #/Eがないので,/E送信。 GOTO(T$) #指定されたT$のラベルへ。 #========================================================================= TITMIS0: #会議室,メール,共用タイトルミス処理ルーチン。 SEND("Title つけ忘れです m(_._)m\R") WAIT(":") GOTO(T$) #T$は居場所フラグ。 #========================================================================= DAT_: #CHAT判断ルーチン。 VSWITCH(R$) #LOOP0でR$を設定。 CASE("C") #フラグがCの場合。 CALL(CHAT) #CHATへ。 VCLEAR("R") #R$を初期化。 GOTO(UPT) #_PAD_.PADファイル指定読み込みルーチンへ。 ELSE #フラグがCでない場合。 GOTO(UPT) #_PAD_.PAD読み込み分岐へ。 END #========================================================================= UPTEND: #UPTから,_PAD_.PADのEOFを受けて,終了処理。 FCLOSE #_PAD_.PADを閉じる。 DELFILE(I$) #_PAD_.PADを削除。 CAT(X$,"$AAA") #X$は,元マクロ名。ラヴェルAAAへ復帰。 CHAIN(X$) #元マクロへ。 #========================================================================= NEXT_: #マルチポスト指定ルーチン。SENDから,/Eがある場合。 SEND(F$) #F$=/E,/E送信。 SEND("\R") CALL(LOOP0) SEND("\R") #修正確認。 JUMPSRCHY(T$,"MAIL",MLO) #MAIL送信の場合,宛先送信処理,後NEXT__へ。 CALL(LOOP0) SEND("\R") #BBS登録確認。 NEXT__: #/Eの後の続きの判断分岐。 RREAD(F$,EOF_) #ファイル末ならば終了処理へ。続きがあれば,書き込み処理。 CALL(LOOP0) SEND("W\R") #継続書き込みコマンド送信。 LEFT(F$,"30") #TITEL読込。長さ調整。 CALL(LOOP0) CONVERT("OFF") SEND(F$) #TITLE送信。 CONVERT("ON") SEND("\R") CALL(LOOP0) SEND("\R") #TITLE確認。 GOTO(SEND) #汎用送信ループへ戻る。 EOF_: #登録確認後の終了処理。 JUMPSRCHY(T$,"MAIL",MAIL000) #MAILの場合。送信済ファイル移動処理へ。 GOTO(BBS0_) #会議室の場合。送信済ファイル移動処理へ。 MLO: #NEXT_から,宛先送信処理。 CALL(LOOP0) SEND(A$) #宛先送信。 SEND("\R") U$="NEXT__" #IDMISの場合の移動先フラグ。 STIMEOUT(2) SWITCH CASE("◆") #エラーメッセージの有無確認。 GOTO(IDMIS) END CALL(LOOP0) SEND("\R") #宛先登録確認。 GOTO(NEXT__) #続き存否確認処理へ。 IDMIS: #居場所フラグにはU$を使用。 CALL(LOOP0) PRINTCR("") PRINTCR("□送信先ID or ハンドル名にミスがありましたので,貴方宛に送信します□") SEND(W$) #W$=USER ID or ハンドル名。 SEND("\R") CALL(LOOP0) SEND("\R") #宛先登録確認。 GOTO(U$) #U$は居場所フラグ。指定先へ。 #========================================================================= DO: #コマンド直接指定の場合。 CAT(L$,"$DAT_") #L$は戻り先マクロ。ラヴェルDAT_へ復帰。 JUMPE(D$,"",ERR) #コマンド指定がない場合。 SEND(D$) #指定コマンド送信。 SEND("\R") CALL(LOOP0) CHAIN(L$) #元マクロへ。 #========================================================================= DL_: #DLリスト取得指定の場合。 CAT(L$,"$DAT_") #L$は戻り先マクロ。 JUMPE(A$,"",ERR) SEND("DL\R") #DLへ。 STIMEOUT(2) SWITCH CASE("◆") GOTO(ERR3) END CALL(LOOP0) SEND(A$) #DL番号送信。 SEND("\R") STIMEOUT(2) SWITCH CASE("◆") GOTO(ERR2) END CALL(LOOP0) SEND("1\R") #リスト取得選択。 SWI: #DLプロンプト判断ルーチン。 SWITCH CASE("):") WAIT("",1,SWI) GOTO(TSE) CASE("\010:") WAIT("",1,SWI) GOTO(ESE) ELSE GOTO(SWI) END ESE: #リストが数頁ある場合。 SEND("E\R") #表示終了送信。 CALL(LOOP0) SEND("T\R") #DLを抜ける。 CALL(LOOP0) CHAIN(L$) #元マクロへ。 TSE: #リストが1頁分しかない場合。 SEND("T\R") #DLを抜ける。 CALL(LOOP0) CHAIN(L$) #元マクロへ。 #========================================================================= DLN: #最新DLリスト取得指定の場合。 CAT(L$,"$DAT_") #L$は戻り先マクロ。 SEND("DL\R") #DLへ。 STIMEOUT(2) SWITCH CASE("◆") GOTO(ERR3) END CALL(LOOP0) SEND("N\R") #最新リスト取得コマンド送信。 CALL(LOOP0) SEND("T\R") #DLを抜ける。 CALL(LOOP0) CHAIN(L$) #元マクロへ。 #========================================================================= KES: #自発言削除指定の場合。 U$="" CAT(L$,"$DAT_") #L$は戻り先マクロ。 JUMPE(A$,"",ERR) #会議室等の指定がない場合。 PICKWORD(U$,A$,E$) #/で区切る。U$は会議室番号。 JUMPE(U$,"",ERR) #会議室指定がない場合(//となっている)。 JUMPE(A$,"",ERR) #発言番号指定がない場合。 JUMPE(U$,"1",ERR) #1番会議室を指定した場合。 SEND(U$) #指定会議室への移動送信。 SEND("\R") STIMEOUT(2) SWITCH CASE("◆") #会議室に入れない場合。 GOTO(ERR3) END CALL(LOOP0) SEND("DEL ") #発言削除コマンド送信。 SEND(A$) #削除発言番号送信。 SEND("\R") STIMEOUT(2) SWITCH CASE("◆") #発言削除が不可能な場合。 GOTO(ERR3) END CALL(LOOP0) SEND("1\R") #削除の確認。 VCLEAR("UH") CALL(LOOP0) CHAIN(L$) #元マクロへ。 #========================================================================= ERR: #汎用エラー処理ルーチン。 CHAIN(L$) #元マクロへ。 ERR2: #DLモードに入った後,指定番号DLに入れない場合。 CALL(LOOP0) SEND("T\R") #メインプロンプトへ復帰。 CALL(LOOP0) CHAIN(L$) #元マクロへ。 ERR3: #LOOP0の前の場合。 CALL(LOOP0) CHAIN(L$) #元マクロへ。 #========================================================================= CHAT: #CHATルーチン。 WAIT("",1,CHAT) #同期調整。 SEND(C$) #通常CHAT入りコマンド送信。 CALL(CHAT0) RETURN #CHAT判断ルーチンへ復帰。 CHAT0: #CHATから。 WAIT("",1,CHAT0) #同期調整。 VCLEAR("A") #入力状況把握のためのクリア。 INPUT(A$,"チャットは楽しいね。",705.120) #A$にCHAT発言を格納。ウィンドウ表示。 IFE(A$,"") #入力できない状態ならば。 CALL(CHATERR) CONVERT(OFF) SEND(A$) #CHAT発言送信。 CONVERT(ON) SEND("\R") IFE(A$,"/E") #CHAT終了サインならば。 RETURN #CHATへ復帰。 GOTO(CHAT0) CHATERR: SEND("自動運転中で,反応できないの。ごめんなさい。 m(_._)m\R") CHATERR0: #CHATERR処理の続き。 WAIT("",1,CHATERR0) A$="/E" #終了サインを格納。 RETURN #CHAT0,A$送信直前へ復帰。 #========================================================================= LOOP0: SWITCH CASE("T{^。^`}ヨホホホ。") #CHATメッセージ受信。 GETCRTS(Z$,"0") #プロンプト部分を取得。Z$は,居場所フラグ。 R$="C" #R$は,CHAT判断フラグ。 RETURN CASE("+\013\010") #TITLE書き込み桁表示。 WAIT("",1,LOOP0) RETURN CASE("0\013\010") #発言書き込み桁表示。 WAIT("",1,LOOP0) RETURN CASE("い\013\010:") WAIT(" ",1,LOOP0) RETURN CASE("\010:") WAIT("",1,LOOP0) RETURN CASE("\010:") WAIT("",1,LOOP0) RETURN CASE("名】:") WAIT("",1,LOOP0) RETURN CASE(">") GETCRTS(Z$,"0") WAIT("",1,LOOP0) RETURN CASE("):") WAIT("",1,LOOP0) RETURN CASE(":") WAIT("",1,LOOP0) RETURN END RETURN #=========================================================================